Freeswitch-svn
Threads by month
- ----- 2026 -----
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
October 2008
- 13 participants
- 384 discussions
[commit] r9780 - in freeswitch/trunk/src/mod/languages: mod_java mod_java/src/org/freeswitch/swig mod_lua mod_perl mod_python
by Freeswitch SVN 01 Oct '08
by Freeswitch SVN 01 Oct '08
01 Oct '08
Author: anthm
Date: Wed Oct 1 14:27:29 2008
New Revision: 9780
Modified:
freeswitch/trunk/src/mod/languages/mod_java/src/org/freeswitch/swig/IVRMenu.java
freeswitch/trunk/src/mod/languages/mod_java/src/org/freeswitch/swig/freeswitchJNI.java
freeswitch/trunk/src/mod/languages/mod_java/switch_swig_wrap.cpp
freeswitch/trunk/src/mod/languages/mod_lua/mod_lua_wrap.cpp
freeswitch/trunk/src/mod/languages/mod_perl/mod_perl_wrap.cpp
freeswitch/trunk/src/mod/languages/mod_python/mod_python_wrap.cpp
Log:
Commit FSCORE-183, tested by me but others test also.
Modified: freeswitch/trunk/src/mod/languages/mod_java/src/org/freeswitch/swig/IVRMenu.java
==============================================================================
--- freeswitch/trunk/src/mod/languages/mod_java/src/org/freeswitch/swig/IVRMenu.java (original)
+++ freeswitch/trunk/src/mod/languages/mod_java/src/org/freeswitch/swig/IVRMenu.java Wed Oct 1 14:27:29 2008
@@ -33,8 +33,8 @@
swigCPtr = 0;
}
- public IVRMenu(IVRMenu main, String name, String greeting_sound, String short_greeting_sound, String invalid_sound, String exit_sound, String confirm_macro, String confirm_key, int confirm_attempts, int inter_timeout, int digit_len, int timeout, int max_failures) {
- this(freeswitchJNI.new_IVRMenu(IVRMenu.getCPtr(main), main, name, greeting_sound, short_greeting_sound, invalid_sound, exit_sound, confirm_macro, confirm_key, confirm_attempts, inter_timeout, digit_len, timeout, max_failures), true);
+ public IVRMenu(IVRMenu main, String name, String greeting_sound, String short_greeting_sound, String invalid_sound, String exit_sound, String confirm_macro, String confirm_key, int confirm_attempts, int inter_timeout, int digit_len, int timeout, int max_failures, int max_timeouts) {
+ this(freeswitchJNI.new_IVRMenu(IVRMenu.getCPtr(main), main, name, greeting_sound, short_greeting_sound, invalid_sound, exit_sound, confirm_macro, confirm_key, confirm_attempts, inter_timeout, digit_len, timeout, max_failures, max_timeouts), true);
}
public void bindAction(String action, String arg, String bind) {
Modified: freeswitch/trunk/src/mod/languages/mod_java/src/org/freeswitch/swig/freeswitchJNI.java
==============================================================================
--- freeswitch/trunk/src/mod/languages/mod_java/src/org/freeswitch/swig/freeswitchJNI.java (original)
+++ freeswitch/trunk/src/mod/languages/mod_java/src/org/freeswitch/swig/freeswitchJNI.java Wed Oct 1 14:27:29 2008
@@ -11,7 +11,7 @@
class freeswitchJNI {
public final static native void consoleLog(String jarg1, String jarg2);
public final static native void consoleCleanLog(String jarg1);
- public final static native long new_IVRMenu(long jarg1, IVRMenu jarg1_, String jarg2, String jarg3, String jarg4, String jarg5, String jarg6, String jarg7, String jarg8, int jarg9, int jarg10, int jarg11, int jarg12, int jarg13);
+ public final static native long new_IVRMenu(long jarg1, IVRMenu jarg1_, String jarg2, String jarg3, String jarg4, String jarg5, String jarg6, String jarg7, String jarg8, int jarg9, int jarg10, int jarg11, int jarg12, int jarg13, int jarg14);
public final static native void delete_IVRMenu(long jarg1);
public final static native void IVRMenu_bindAction(long jarg1, IVRMenu jarg1_, String jarg2, String jarg3, String jarg4);
public final static native void IVRMenu_execute(long jarg1, IVRMenu jarg1_, long jarg2, CoreSession jarg2_, String jarg3);
Modified: freeswitch/trunk/src/mod/languages/mod_java/switch_swig_wrap.cpp
==============================================================================
--- freeswitch/trunk/src/mod/languages/mod_java/switch_swig_wrap.cpp (original)
+++ freeswitch/trunk/src/mod/languages/mod_java/switch_swig_wrap.cpp Wed Oct 1 14:27:29 2008
@@ -244,7 +244,7 @@
}
-SWIGEXPORT jlong JNICALL Java_org_freeswitch_swig_freeswitchJNI_new_1IVRMenu(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jstring jarg3, jstring jarg4, jstring jarg5, jstring jarg6, jstring jarg7, jstring jarg8, jint jarg9, jint jarg10, jint jarg11, jint jarg12, jint jarg13) {
+SWIGEXPORT jlong JNICALL Java_org_freeswitch_swig_freeswitchJNI_new_1IVRMenu(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jstring jarg3, jstring jarg4, jstring jarg5, jstring jarg6, jstring jarg7, jstring jarg8, jint jarg9, jint jarg10, jint jarg11, jint jarg12, jint jarg13, jint jarg14) {
jlong jresult = 0 ;
IVRMenu *arg1 = (IVRMenu *) 0 ;
char *arg2 = (char *) 0 ;
@@ -259,6 +259,7 @@
int arg11 ;
int arg12 ;
int arg13 ;
+ int arg14 ;
IVRMenu *result = 0 ;
(void)jenv;
@@ -305,7 +306,8 @@
arg11 = (int)jarg11;
arg12 = (int)jarg12;
arg13 = (int)jarg13;
- result = (IVRMenu *)new IVRMenu(arg1,(char const *)arg2,(char const *)arg3,(char const *)arg4,(char const *)arg5,(char const *)arg6,(char const *)arg7,(char const *)arg8,arg9,arg10,arg11,arg12,arg13);
+ arg14 = (int)jarg14;
+ result = (IVRMenu *)new IVRMenu(arg1,(char const *)arg2,(char const *)arg3,(char const *)arg4,(char const *)arg5,(char const *)arg6,(char const *)arg7,(char const *)arg8,arg9,arg10,arg11,arg12,arg13,arg14);
*(IVRMenu **)&jresult = result;
if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2);
if (arg3) jenv->ReleaseStringUTFChars(jarg3, (const char *)arg3);
Modified: freeswitch/trunk/src/mod/languages/mod_lua/mod_lua_wrap.cpp
==============================================================================
--- freeswitch/trunk/src/mod/languages/mod_lua/mod_lua_wrap.cpp (original)
+++ freeswitch/trunk/src/mod/languages/mod_lua/mod_lua_wrap.cpp Wed Oct 1 14:27:29 2008
@@ -1593,9 +1593,10 @@
int arg11 ;
int arg12 ;
int arg13 ;
+ int arg14 ;
IVRMenu *result = 0 ;
- SWIG_check_num_args("IVRMenu",13,13)
+ SWIG_check_num_args("IVRMenu",14,14)
if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("IVRMenu",1,"IVRMenu *");
if(!lua_isstring(L,2)) SWIG_fail_arg("IVRMenu",2,"char const *");
if(!lua_isstring(L,3)) SWIG_fail_arg("IVRMenu",3,"char const *");
@@ -1609,6 +1610,7 @@
if(!lua_isnumber(L,11)) SWIG_fail_arg("IVRMenu",11,"int");
if(!lua_isnumber(L,12)) SWIG_fail_arg("IVRMenu",12,"int");
if(!lua_isnumber(L,13)) SWIG_fail_arg("IVRMenu",13,"int");
+ if(!lua_isnumber(L,14)) SWIG_fail_arg("IVRMenu",14,"int");
if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_IVRMenu,0))){
SWIG_fail_ptr("new_IVRMenu",1,SWIGTYPE_p_IVRMenu);
@@ -1626,7 +1628,8 @@
arg11 = (int)lua_tonumber(L, 11);
arg12 = (int)lua_tonumber(L, 12);
arg13 = (int)lua_tonumber(L, 13);
- result = (IVRMenu *)new IVRMenu(arg1,(char const *)arg2,(char const *)arg3,(char const *)arg4,(char const *)arg5,(char const *)arg6,(char const *)arg7,(char const *)arg8,arg9,arg10,arg11,arg12,arg13);
+ arg14 = (int)lua_tonumber(L, 14);
+ result = (IVRMenu *)new IVRMenu(arg1,(char const *)arg2,(char const *)arg3,(char const *)arg4,(char const *)arg5,(char const *)arg6,(char const *)arg7,(char const *)arg8,arg9,arg10,arg11,arg12,arg13,arg14);
SWIG_arg=0;
SWIG_NewPointerObj(L,result,SWIGTYPE_p_IVRMenu,1); SWIG_arg++;
return SWIG_arg;
Modified: freeswitch/trunk/src/mod/languages/mod_perl/mod_perl_wrap.cpp
==============================================================================
--- freeswitch/trunk/src/mod/languages/mod_perl/mod_perl_wrap.cpp (original)
+++ freeswitch/trunk/src/mod/languages/mod_perl/mod_perl_wrap.cpp Wed Oct 1 14:27:29 2008
@@ -1995,6 +1995,7 @@
int arg11 ;
int arg12 ;
int arg13 ;
+ int arg14 ;
IVRMenu *result = 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -2029,11 +2030,13 @@
int ecode12 = 0 ;
int val13 ;
int ecode13 = 0 ;
+ int val14 ;
+ int ecode14 = 0 ;
int argvi = 0;
dXSARGS;
- if ((items < 13) || (items > 13)) {
- SWIG_croak("Usage: new_IVRMenu(main,name,greeting_sound,short_greeting_sound,invalid_sound,exit_sound,confirm_macro,confirm_key,confirm_attempts,inter_timeout,digit_len,timeout,max_failures);");
+ if ((items < 14) || (items > 14)) {
+ SWIG_croak("Usage: new_IVRMenu(main,name,greeting_sound,short_greeting_sound,invalid_sound,exit_sound,confirm_macro,confirm_key,confirm_attempts,inter_timeout,digit_len,timeout,max_failures,max_timeouts);");
}
res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_IVRMenu, 0 | 0 );
if (!SWIG_IsOK(res1)) {
@@ -2100,7 +2103,12 @@
SWIG_exception_fail(SWIG_ArgError(ecode13), "in method '" "new_IVRMenu" "', argument " "13"" of type '" "int""'");
}
arg13 = static_cast< int >(val13);
- result = (IVRMenu *)new IVRMenu(arg1,(char const *)arg2,(char const *)arg3,(char const *)arg4,(char const *)arg5,(char const *)arg6,(char const *)arg7,(char const *)arg8,arg9,arg10,arg11,arg12,arg13);
+ ecode14 = SWIG_AsVal_int SWIG_PERL_CALL_ARGS_2(ST(13), &val14);
+ if (!SWIG_IsOK(ecode14)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode14), "in method '" "new_IVRMenu" "', argument " "14"" of type '" "int""'");
+ }
+ arg14 = static_cast< int >(val14);
+ result = (IVRMenu *)new IVRMenu(arg1,(char const *)arg2,(char const *)arg3,(char const *)arg4,(char const *)arg5,(char const *)arg6,(char const *)arg7,(char const *)arg8,arg9,arg10,arg11,arg12,arg13,arg14);
ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IVRMenu, SWIG_OWNER | SWIG_SHADOW); argvi++ ;
if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
@@ -2115,6 +2123,7 @@
+
XSRETURN(argvi);
fail:
@@ -2130,6 +2139,7 @@
+
SWIG_croak_null();
}
}
Modified: freeswitch/trunk/src/mod/languages/mod_python/mod_python_wrap.cpp
==============================================================================
--- freeswitch/trunk/src/mod/languages/mod_python/mod_python_wrap.cpp (original)
+++ freeswitch/trunk/src/mod/languages/mod_python/mod_python_wrap.cpp Wed Oct 1 14:27:29 2008
@@ -3084,6 +3084,7 @@
int arg11 ;
int arg12 ;
int arg13 ;
+ int arg14 ;
IVRMenu *result = 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
@@ -3118,6 +3119,8 @@
int ecode12 = 0 ;
int val13 ;
int ecode13 = 0 ;
+ int val14 ;
+ int ecode14 = 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
PyObject * obj2 = 0 ;
@@ -3131,8 +3134,9 @@
PyObject * obj10 = 0 ;
PyObject * obj11 = 0 ;
PyObject * obj12 = 0 ;
+ PyObject * obj13 = 0 ;
- if (!PyArg_ParseTuple(args,(char *)"OOOOOOOOOOOOO:new_IVRMenu",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8,&obj9,&obj10,&obj11,&obj12)) SWIG_fail;
+ if (!PyArg_ParseTuple(args,(char *)"OOOOOOOOOOOOOO:new_IVRMenu",&obj0,&obj1,&obj2,&obj3,&obj4,&obj5,&obj6,&obj7,&obj8,&obj9,&obj10,&obj11,&obj12,&obj13)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IVRMenu, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_IVRMenu" "', argument " "1"" of type '" "IVRMenu *""'");
@@ -3198,7 +3202,12 @@
SWIG_exception_fail(SWIG_ArgError(ecode13), "in method '" "new_IVRMenu" "', argument " "13"" of type '" "int""'");
}
arg13 = static_cast< int >(val13);
- result = (IVRMenu *)new IVRMenu(arg1,(char const *)arg2,(char const *)arg3,(char const *)arg4,(char const *)arg5,(char const *)arg6,(char const *)arg7,(char const *)arg8,arg9,arg10,arg11,arg12,arg13);
+ ecode14 = SWIG_AsVal_int(obj13, &val14);
+ if (!SWIG_IsOK(ecode14)) {
+ SWIG_exception_fail(SWIG_ArgError(ecode14), "in method '" "new_IVRMenu" "', argument " "14"" of type '" "int""'");
+ }
+ arg14 = static_cast< int >(val14);
+ result = (IVRMenu *)new IVRMenu(arg1,(char const *)arg2,(char const *)arg3,(char const *)arg4,(char const *)arg5,(char const *)arg6,(char const *)arg7,(char const *)arg8,arg9,arg10,arg11,arg12,arg13,arg14);
resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IVRMenu, SWIG_POINTER_NEW | 0 );
if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
1
0
01 Oct '08
Author: anthm
Date: Wed Oct 1 14:26:19 2008
New Revision: 9779
Modified:
freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c
Log:
add hupall cmd
Modified: freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c
==============================================================================
--- freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c (original)
+++ freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c Wed Oct 1 14:26:19 2008
@@ -2569,11 +2569,50 @@
return SWITCH_STATUS_SUCCESS;
}
+SWITCH_STANDARD_API(hupall_api_function)
+{
+ char *mycmd = NULL, *argv[3] = { 0 };
+ int argc = 0;
+ char *var = NULL;
+ char *val = NULL;
+ switch_call_cause_t cause = SWITCH_CAUSE_MANAGER_REQUEST;
+
+ if (!switch_strlen_zero(cmd) && (mycmd = strdup(cmd))) {
+ argc = switch_separate_string(mycmd, ' ', argv, (sizeof(argv) / sizeof(argv[0])));
+ if ((cause = switch_channel_str2cause(argv[0])) == SWITCH_CAUSE_NONE) {
+ cause = SWITCH_CAUSE_MANAGER_REQUEST;
+ }
+ var = argv[1];
+ val = argv[2];
+ }
+
+ if (!val) {
+ var = NULL;
+ }
+
+ if (switch_strlen_zero(var)) {
+ switch_core_session_hupall(cause);
+ } else {
+ switch_core_session_hupall_matching_var(var, val, cause);
+ }
+
+ if (switch_strlen_zero(var)) {
+ stream->write_function(stream, "+OK hangup all channels with cause %s\n", switch_channel_cause2str(cause));
+ } else {
+ stream->write_function(stream, "+OK hangup all channels matching [%s]=[%s] with cause: %s\n", var, val, switch_channel_cause2str(cause));
+ }
+
+ switch_safe_free(mycmd);
+ return SWITCH_STATUS_SUCCESS;
+
+}
+
SWITCH_MODULE_LOAD_FUNCTION(mod_commands_load)
{
switch_api_interface_t *commands_api_interface;
*module_interface = switch_loadable_module_create_module_interface(pool, modname);
+ SWITCH_ADD_API(commands_api_interface, "hupall", "hupall", hupall_api_function, "<cause> [<var> <value>]");
SWITCH_ADD_API(commands_api_interface, "strftime_tz", "strftime_tz", strftime_tz_api_function, "<Timezone_name> [format string]");
SWITCH_ADD_API(commands_api_interface, "originate", "Originate a Call", originate_function, ORIGINATE_SYNTAX);
SWITCH_ADD_API(commands_api_interface, "tone_detect", "Start Tone Detection on a channel", tone_detect_session_function, TONE_DETECT_SYNTAX);
1
0
Author: anthm
Date: Wed Oct 1 14:02:46 2008
New Revision: 9778
Modified:
freeswitch/trunk/src/switch_rtp.c
Log:
clean up rtp a little and tolerate polycom cng bug
Modified: freeswitch/trunk/src/switch_rtp.c
==============================================================================
--- freeswitch/trunk/src/switch_rtp.c (original)
+++ freeswitch/trunk/src/switch_rtp.c Wed Oct 1 14:02:46 2008
@@ -197,6 +197,7 @@
char *stun_ip;
switch_port_t stun_port;
int from_auto;
+ uint32_t cng_count;
};
static int global_init = 0;
@@ -1232,6 +1233,8 @@
}
}
+#define return_cng_frame() do_cng = 1; goto timer_check
+
static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_type, switch_frame_flag_t *flags, switch_io_flag_t io_flags)
{
switch_size_t bytes = 0;
@@ -1240,7 +1243,7 @@
stfu_frame_t *jb_frame;
int ret = -1;
int sleep_mss = 1000;
-
+
if (!switch_rtp_ready(rtp_session)) {
return -1;
}
@@ -1294,14 +1297,22 @@
if (bytes) {
rtp_session->missed_count = 0;
+
+ if ((rtp_session->recv_msg.header.pt == rtp_session->cng_pt || rtp_session->recv_msg.header.pt == 13)) {
+ if (++rtp_session->cng_count == 1) {
+ return_cng_frame();
+ }
+ continue;
+ } else {
+ rtp_session->cng_count = 0;
+ }
}
if (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_BREAK)) {
switch_clear_flag_locked(rtp_session, SWITCH_RTP_FLAG_BREAK);
do_2833(rtp_session);
bytes = 0;
- do_cng = 1;
- goto cng;
+ return_cng_frame();
}
if (bytes && switch_test_flag(rtp_session, SWITCH_RTP_FLAG_PROXY_MEDIA)) {
@@ -1312,8 +1323,7 @@
}
if (!bytes && (io_flags & SWITCH_IO_FLAG_NOBLOCK)) {
- do_cng = 1;
- goto cng;
+ return_cng_frame();
}
@@ -1363,8 +1373,6 @@
goto end;
}
-
-
if (rtp_session->jb && ((bytes && rtp_session->recv_msg.header.pt == rtp_session->payload) || check)) {
if (bytes) {
if (rtp_session->recv_msg.header.m) {
@@ -1384,7 +1392,7 @@
rtp_session->recv_msg.header.ts = htonl(jb_frame->ts);
rtp_session->recv_msg.header.pt = rtp_session->payload;
} else {
- goto cng;
+ goto timer_check;
}
}
@@ -1484,14 +1492,15 @@
do_cng = 1;
}
- cng:
+ timer_check:
+
if (do_cng) {
- memset(&rtp_session->recv_msg.body, 0, 2);
- rtp_session->recv_msg.body[0] = 127;
- rtp_session->recv_msg.header.pt = SWITCH_RTP_CNG_PAYLOAD;
+ uint8_t *data = (uint8_t *) rtp_session->recv_msg.body;
+ memset(data, 0, 2);
+ data[0] = 65;
+ rtp_session->recv_msg.header.pt = (uint32_t) rtp_session->cng_pt ? rtp_session->cng_pt : SWITCH_RTP_CNG_PAYLOAD;
*flags |= SFF_CNG;
- /* Return a CNG frame */
- *payload_type = SWITCH_RTP_CNG_PAYLOAD;
+ *payload_type = (switch_payload_t) rtp_session->recv_msg.header.pt;
ret = 2 + rtp_header_len;
goto end;
}
@@ -1512,21 +1521,14 @@
bytes = jb_frame->dlen + rtp_header_len;
rtp_session->recv_msg.header.ts = htonl(jb_frame->ts);
} else if (!bytes && switch_test_flag(rtp_session, SWITCH_RTP_FLAG_USE_TIMER)) { /* We're late! We're Late! */
- uint8_t *data = (uint8_t *) rtp_session->recv_msg.body;
-
+
+
if (!switch_test_flag(rtp_session, SWITCH_RTP_FLAG_NOBLOCK) && status == SWITCH_STATUS_BREAK) {
switch_yield(1000);
continue;
}
-
- memset(data, 0, 2);
- data[0] = 65;
-
- rtp_session->recv_msg.header.pt = (uint32_t) rtp_session->cng_pt ? rtp_session->cng_pt : SWITCH_RTP_CNG_PAYLOAD;
- *flags |= SFF_CNG;
- *payload_type = (switch_payload_t) rtp_session->recv_msg.header.pt;
- ret = 2 + rtp_header_len;
- goto end;
+
+ return_cng_frame();
}
}
@@ -1538,10 +1540,6 @@
goto end;
}
- if (bytes && rtp_session->cng_pt && rtp_session->recv_msg.header.pt == rtp_session->cng_pt) {
- goto do_continue;
- }
-
if (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_GOOGLEHACK) && rtp_session->recv_msg.header.pt == 102) {
rtp_session->recv_msg.header.pt = 97;
}
@@ -1552,11 +1550,8 @@
do_continue:
- if (sleep_mss) {
- switch_yield(sleep_mss);
- } else {
- switch_yield(1000);
- }
+ switch_yield(sleep_mss);
+
}
if (switch_rtp_ready(rtp_session)) {
1
0
[commit] r9777 - in freeswitch/trunk: conf/autoload_configs src src/include
by Freeswitch SVN 01 Oct '08
by Freeswitch SVN 01 Oct '08
01 Oct '08
Author: anthm
Date: Wed Oct 1 13:31:59 2008
New Revision: 9777
Modified:
freeswitch/trunk/conf/autoload_configs/ivr.conf.xml
freeswitch/trunk/src/include/switch_cpp.h
freeswitch/trunk/src/include/switch_ivr.h
freeswitch/trunk/src/switch_cpp.cpp
freeswitch/trunk/src/switch_ivr_menu.c
Log:
Commit FSCORE-183, tested by me but others test also.
Modified: freeswitch/trunk/conf/autoload_configs/ivr.conf.xml
==============================================================================
--- freeswitch/trunk/conf/autoload_configs/ivr.conf.xml (original)
+++ freeswitch/trunk/conf/autoload_configs/ivr.conf.xml Wed Oct 1 13:31:59 2008
@@ -10,6 +10,7 @@
timeout ="10000"
inter-digit-timeout="2000"
max-failures="3"
+ max-timeouts="3"
digit-len="4">
<entry action="menu-exec-app" digits="1" param="bridge sofia/$${domain}/888(a)conference.freeswitch.org"/>
<entry action="menu-exec-app" digits="2" param="transfer 9996 XML default"/> <!-- FS echo -->
@@ -26,7 +27,8 @@
invalid-sound="ivr/ivr-that_was_an_invalid_entry.wav"
exit-sound="voicemail/vm-goodbye.wav"
timeout="15000"
- max-failures="3">
+ max-failures="3"
+ max-timeouts="3">
<entry action="menu-top" digits="*"/>
</menu>
Modified: freeswitch/trunk/src/include/switch_cpp.h
==============================================================================
--- freeswitch/trunk/src/include/switch_cpp.h (original)
+++ freeswitch/trunk/src/include/switch_cpp.h Wed Oct 1 13:31:59 2008
@@ -92,7 +92,8 @@
const char *exit_sound,
const char *confirm_macro,
const char *confirm_key,
- int confirm_attempts, int inter_timeout, int digit_len, int timeout, int max_failures);
+ int confirm_attempts, int inter_timeout, int digit_len,
+ int timeout, int max_failures, int max_timeouts);
virtual SWITCH_DECLARE_CONSTRUCTOR ~ IVRMenu();
SWITCH_DECLARE(void) bindAction(char *action, const char *arg, const char *bind);
SWITCH_DECLARE(void) execute(CoreSession * session, const char *name);
Modified: freeswitch/trunk/src/include/switch_ivr.h
==============================================================================
--- freeswitch/trunk/src/include/switch_ivr.h (original)
+++ freeswitch/trunk/src/include/switch_ivr.h Wed Oct 1 13:31:59 2008
@@ -680,7 +680,8 @@
const char *confirm_macro,
const char *confirm_key,
int confirm_attempts,
- int inter_timeout, int digit_len, int timeout, int max_failures, switch_memory_pool_t *pool);
+ int inter_timeout, int digit_len, int timeout, int max_failures,
+ int max_timeouts, switch_memory_pool_t *pool);
/*!
*\brief switch_ivr_menu_bind_action: Bind a keystroke to an action.
Modified: freeswitch/trunk/src/switch_cpp.cpp
==============================================================================
--- freeswitch/trunk/src/switch_cpp.cpp (original)
+++ freeswitch/trunk/src/switch_cpp.cpp Wed Oct 1 13:31:59 2008
@@ -112,7 +112,8 @@
int inter_timeout,
int digit_len,
int timeout,
- int max_failures)
+ int max_failures,
+ int max_timeouts)
{
menu = NULL;
switch_core_new_memory_pool(&pool);
@@ -122,7 +123,7 @@
}
switch_ivr_menu_init(&menu, main ? main->menu : NULL, name, greeting_sound, short_greeting_sound, invalid_sound,
- exit_sound, confirm_macro, confirm_key, confirm_attempts, inter_timeout, digit_len, timeout, max_failures, pool);
+ exit_sound, confirm_macro, confirm_key, confirm_attempts, inter_timeout, digit_len, timeout, max_failures, max_timeouts, pool);
}
Modified: freeswitch/trunk/src/switch_ivr_menu.c
==============================================================================
--- freeswitch/trunk/src/switch_ivr_menu.c (original)
+++ freeswitch/trunk/src/switch_ivr_menu.c Wed Oct 1 13:31:59 2008
@@ -47,6 +47,7 @@
int confirm_attempts;
int digit_len;
int max_failures;
+ int max_timeouts;
int timeout;
int inter_timeout;
switch_size_t inlen;
@@ -102,6 +103,7 @@
int inter_timeout,
int digit_len,
int timeout, int max_failures,
+ int max_timeouts,
switch_memory_pool_t *pool)
{
switch_ivr_menu_t *menu;
@@ -167,6 +169,8 @@
menu->max_failures = max_failures;
+ menu->max_timeouts = max_timeouts;
+
menu->timeout = timeout;
menu->inter_timeout = inter_timeout;
@@ -345,7 +349,7 @@
SWITCH_DECLARE(switch_status_t) switch_ivr_menu_execute(switch_core_session_t *session, switch_ivr_menu_t * stack, char *name, void *obj)
{
- int reps = 0, errs = 0, match = 0, running = 1;
+ int reps = 0, errs = 0, timeouts = 0, match = 0, running = 1;
char *greeting_sound = NULL, *aptr = NULL;
char arg[512];
switch_ivr_action_t todo = SWITCH_IVR_ACTION_DIE;
@@ -372,11 +376,22 @@
}
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Executing IVR menu %s\n", menu->name);
+ switch_channel_set_variable(channel, "ivr_menu_status", "success");
- for (reps = 0; (running && status == SWITCH_STATUS_SUCCESS && errs < menu->max_failures); reps++) {
+ for (reps = 0; running && status == SWITCH_STATUS_SUCCESS; reps++) {
if (!switch_channel_ready(channel)) {
break;
}
+ if (errs == menu->max_failures) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Maximum failures\n");
+ switch_channel_set_variable(channel, "ivr_menu_status", "failure");
+ break;
+ }
+ if (timeouts == menu->max_timeouts) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Maximum timeouts\n");
+ switch_channel_set_variable(channel, "ivr_menu_status", "timeout");
+ break;
+ }
if (reps > 0 && menu->short_greeting_sound) {
greeting_sound = menu->short_greeting_sound;
@@ -390,7 +405,11 @@
memset(arg, 0, sizeof(arg));
memset(menu->buf, 0, menu->inlen + 1);
- status = play_and_collect(session, menu, greeting_sound, menu->inlen);
+
+ if (play_and_collect(session, menu, greeting_sound, menu->inlen) == SWITCH_STATUS_TIMEOUT && *menu->buf == '\0') {
+ timeouts++;
+ continue;
+ }
if (*menu->buf != '\0') {
@@ -494,17 +513,12 @@
if (*menu->buf) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "IVR menu '%s' caught invalid input '%s'\n", menu->name, menu->buf);
if (menu->invalid_sound) {
- status = play_and_collect(session, menu, menu->invalid_sound, 0);
+ play_and_collect(session, menu, menu->invalid_sound, 0);
}
} else {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "IVR menu '%s' no input detected\n", menu->name);
}
errs++;
-
- if (status == SWITCH_STATUS_TIMEOUT) {
- status = SWITCH_STATUS_SUCCESS;
- }
-
if (status == SWITCH_STATUS_SUCCESS) {
status = switch_ivr_sleep(session, 1000, NULL);
}
@@ -693,6 +707,7 @@
const char *exit_sound = switch_xml_attr(xml_menu, "exit-sound"); /* if the attr doesn't exist, return NULL */
const char *timeout = switch_xml_attr_soft(xml_menu, "timeout"); /* if the attr doesn't exist, return "" */
const char *max_failures = switch_xml_attr_soft(xml_menu, "max-failures"); /* if the attr doesn't exist, return "" */
+ const char *max_timeouts = switch_xml_attr_soft(xml_menu, "max-timeouts");
const char *confirm_macro= switch_xml_attr(xml_menu, "confirm-macro");
const char *confirm_key= switch_xml_attr(xml_menu, "confirm-key");
const char *confirm_attempts = switch_xml_attr_soft(xml_menu, "confirm-attempts");
@@ -701,6 +716,10 @@
switch_ivr_menu_t *menu = NULL;
+ if (switch_strlen_zero(max_timeouts)) {
+ max_timeouts = max_failures;
+ }
+
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "building menu '%s'\n", menu_name);
status = switch_ivr_menu_init(&menu,
@@ -716,7 +735,8 @@
atoi(inter_timeout),
atoi(digit_len),
atoi(timeout),
- atoi(max_failures),
+ strlen(max_failures)? atoi(max_failures): 1,
+ strlen(max_timeouts)? atoi(max_timeouts): 1,
xml_menu_ctx->pool);
/* set the menu_stack for the caller */
if (status == SWITCH_STATUS_SUCCESS && *menu_stack == NULL) {
1
0
Author: stkn
Date: Wed Oct 1 09:30:38 2008
New Revision: 9776
Modified:
freeswitch/trunk/src/switch_core.c
Log:
Style police strikes
Modified: freeswitch/trunk/src/switch_core.c
==============================================================================
--- freeswitch/trunk/src/switch_core.c (original)
+++ freeswitch/trunk/src/switch_core.c Wed Oct 1 09:30:38 2008
@@ -1466,15 +1466,13 @@
int ret = 0;
struct system_thread_handle *sth;
switch_memory_pool_t *pool;
-#ifndef __FreeBSD__
-#ifdef HAVE_SETRLIMIT
+#if defined(HAVE_SETRLIMIT) && !defined(__FreeBSD__)
struct rlimit rlim;
rlim.rlim_cur = SWITCH_SYSTEM_THREAD_STACKSIZE;
- rlim.rlim_max = SWITCH_SYSTEM_THREAD_STACKSIZE;;
+ rlim.rlim_max = SWITCH_SYSTEM_THREAD_STACKSIZE;
setrlimit(RLIMIT_STACK, &rlim);
#endif
-#endif
if (switch_core_new_memory_pool(&pool) != SWITCH_STATUS_SUCCESS) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Pool Failure\n");
1
0
[commit] r9775 - in freeswitch/trunk: conf/autoload_configs src/mod/applications/mod_voicemail
by Freeswitch SVN 01 Oct '08
by Freeswitch SVN 01 Oct '08
01 Oct '08
Author: anthm
Date: Wed Oct 1 09:06:59 2008
New Revision: 9775
Modified:
freeswitch/trunk/conf/autoload_configs/voicemail.conf.xml
freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c
Log:
add patch from MODAPP-150 with mods
Modified: freeswitch/trunk/conf/autoload_configs/voicemail.conf.xml
==============================================================================
--- freeswitch/trunk/conf/autoload_configs/voicemail.conf.xml (original)
+++ freeswitch/trunk/conf/autoload_configs/voicemail.conf.xml Wed Oct 1 09:06:59 2008
@@ -42,6 +42,8 @@
<param name="operator-key" value="9"/>
<param name="vmain-extension" value="vmain XML default"/>
<param name="vmain-key" value="*"/>
+ <!-- playback created files as soon as they were recorded by default -->
+ <!--<param name="auto-playback-recordings" value="true"/>-->
<email>
<param name="template-file" value="voicemail.tpl"/>
<param name="notify-template-file" value="notify-voicemail.tpl"/>
Modified: freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c
==============================================================================
--- freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c (original)
+++ freeswitch/trunk/src/mod/applications/mod_voicemail/mod_voicemail.c Wed Oct 1 09:06:59 2008
@@ -123,6 +123,7 @@
uint32_t record_silence_hits;
uint32_t record_sample_rate;
switch_odbc_handle_t *master_odbc;
+ switch_bool_t auto_playback_recordings;
};
typedef struct vm_profile vm_profile_t;
@@ -314,6 +315,8 @@
char *record_comment = "FreeSWITCH Voicemail";
char *record_copyright = "http://www.freeswitch.org";
+ switch_bool_t auto_playback_recordings = SWITCH_TRUE;
+
switch_core_db_t *db;
uint32_t timeout = 10000, max_login_attempts = 3, max_record_len = 300, min_record_len = 3;
@@ -570,7 +573,7 @@
if (tmp > 0 && tmp < 10000) {
min_record_len = tmp;
} else {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "invalid attempts [%s] must be between 1 and 10000s\n", val);
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "invalid record length [%s] must be between 1 and 10000s\n", val);
}
} else if (!strcasecmp(var, "max-record-len")) {
int tmp = 0;
@@ -580,7 +583,7 @@
if (tmp > 0 && tmp < 10000) {
max_record_len = tmp;
} else {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "invalid attempts [%s] must be between 1 and 10000s\n", val);
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "invalid record length [%s] must be between 1 and 10000s\n", val);
}
} else if (!strcasecmp(var, "odbc-dsn") && !switch_strlen_zero(val)) {
#ifdef SWITCH_HAVE_ODBC
@@ -594,6 +597,8 @@
#else
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "ODBC IS NOT AVAILABLE!\n");
#endif
+ } else if (!strcasecmp(var, "auto-playback-recordings")){
+ auto_playback_recordings = switch_true(val);
}
}
@@ -736,6 +741,7 @@
profile->record_silence_hits = record_silence_hits;
profile->record_sample_rate = record_sample_rate;
+ profile->auto_playback_recordings = auto_playback_recordings;
profile->operator_ext = switch_core_strdup(globals.pool, operator_ext);
profile->vmain_ext = switch_core_strdup(globals.pool, vmain_ext);
profile->storage_dir = switch_core_strdup(globals.pool, storage_dir);
@@ -1061,14 +1067,15 @@
status = SWITCH_STATUS_SUCCESS;
}
play_file:
- memset(&fh, 0, sizeof(fh));
- args.input_callback = control_playback;
- memset(&cc, 0, sizeof(cc));
- cc.profile = profile;
- cc.fh = &fh;
- args.buf = &cc;
- switch_ivr_play_file(session, &fh, file_path, &args);
-
+ if (profile->auto_playback_recordings) {
+ memset(&fh, 0, sizeof(fh));
+ args.input_callback = control_playback;
+ memset(&cc, 0, sizeof(cc));
+ cc.profile = profile;
+ cc.fh = &fh;
+ args.buf = &cc;
+ switch_ivr_play_file(session, &fh, file_path, &args);
+ }
while (switch_channel_ready(channel)) {
*input = '\0';
1
0
Author: anthm
Date: Wed Oct 1 08:55:41 2008
New Revision: 9774
Modified:
freeswitch/trunk/src/switch_core.c
Log:
add patch from FSCORE-196
Modified: freeswitch/trunk/src/switch_core.c
==============================================================================
--- freeswitch/trunk/src/switch_core.c (original)
+++ freeswitch/trunk/src/switch_core.c Wed Oct 1 08:55:41 2008
@@ -1466,6 +1466,7 @@
int ret = 0;
struct system_thread_handle *sth;
switch_memory_pool_t *pool;
+#ifndef __FreeBSD__
#ifdef HAVE_SETRLIMIT
struct rlimit rlim;
@@ -1473,6 +1474,7 @@
rlim.rlim_max = SWITCH_SYSTEM_THREAD_STACKSIZE;;
setrlimit(RLIMIT_STACK, &rlim);
#endif
+#endif
if (switch_core_new_memory_pool(&pool) != SWITCH_STATUS_SUCCESS) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Pool Failure\n");
1
0
01 Oct '08
Author: anthm
Date: Wed Oct 1 00:10:45 2008
New Revision: 9773
Added:
freeswitch/trunk/libs/spandsp/src/spandsp/saturated.h
Modified:
freeswitch/trunk/libs/spandsp/src/Makefile.am
freeswitch/trunk/libs/spandsp/src/libspandsp.dsp
freeswitch/trunk/libs/spandsp/src/libspandsp.vcproj
freeswitch/trunk/libs/spandsp/src/spandsp/version.h
Log:
update to snapshot spandsp-20081001.tar.gz
Modified: freeswitch/trunk/libs/spandsp/src/Makefile.am
==============================================================================
--- freeswitch/trunk/libs/spandsp/src/Makefile.am (original)
+++ freeswitch/trunk/libs/spandsp/src/Makefile.am Wed Oct 1 00:10:45 2008
@@ -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.104 2008/09/20 15:44:40 steveu Exp $
+## $Id: Makefile.am,v 1.105 2008/09/30 18:12:42 steveu Exp $
AM_CFLAGS = $(COMP_VENDOR_CFLAGS)
AM_LDFLAGS = $(COMP_VENDOR_LDFLAGS)
@@ -162,6 +162,7 @@
spandsp/plc.h \
spandsp/power_meter.h \
spandsp/queue.h \
+ spandsp/saturated.h \
spandsp/schedule.h \
spandsp/sig_tone.h \
spandsp/silence_gen.h \
Modified: freeswitch/trunk/libs/spandsp/src/libspandsp.dsp
==============================================================================
--- freeswitch/trunk/libs/spandsp/src/libspandsp.dsp (original)
+++ freeswitch/trunk/libs/spandsp/src/libspandsp.dsp Wed Oct 1 00:10:45 2008
@@ -563,6 +563,10 @@
# End Source File
# Begin Source File
+SOURCE=.\spandsp/saturated.h
+# End Source File
+# Begin Source File
+
SOURCE=.\spandsp/schedule.h
# End Source File
# Begin Source File
Modified: freeswitch/trunk/libs/spandsp/src/libspandsp.vcproj
==============================================================================
--- freeswitch/trunk/libs/spandsp/src/libspandsp.vcproj (original)
+++ freeswitch/trunk/libs/spandsp/src/libspandsp.vcproj Wed Oct 1 00:10:45 2008
@@ -296,6 +296,7 @@
<File RelativePath="spandsp/plc.h"></File>
<File RelativePath="spandsp/power_meter.h"></File>
<File RelativePath="spandsp/queue.h"></File>
+<File RelativePath="spandsp/saturated.h"></File>
<File RelativePath="spandsp/schedule.h"></File>
<File RelativePath="spandsp/sig_tone.h"></File>
<File RelativePath="spandsp/silence_gen.h"></File>
Added: freeswitch/trunk/libs/spandsp/src/spandsp/saturated.h
==============================================================================
--- (empty file)
+++ freeswitch/trunk/libs/spandsp/src/spandsp/saturated.h Wed Oct 1 00:10:45 2008
@@ -0,0 +1,199 @@
+/*
+ * SpanDSP - a series of DSP components for telephony
+ *
+ * saturated.h - General saturated arithmetic routines.
+ *
+ * Written by Steve Underwood <steveu(a)coppice.org>
+ *
+ * Copyright (C) 2001, 2008 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: saturated.h,v 1.1 2008/09/19 14:02:05 steveu Exp $
+ */
+
+/*! \file */
+
+#if !defined(_SPANDSP_SATURATED_H_)
+#define _SPANDSP_SATURATED_H_
+
+/*! \page saturated_page Saturated arithmetic
+
+\section saturated_page_sec_1 What does it do?
+
+
+\section saturated_page_sec_2 How does it work?
+
+*/
+
+#if defined(__cplusplus)
+extern "C"
+{
+#endif
+
+static __inline__ int16_t saturate(int32_t amp)
+{
+ int16_t amp16;
+
+ /* Hopefully this is optimised for the common case - not clipping */
+ amp16 = (int16_t) amp;
+ if (amp == amp16)
+ return amp16;
+ if (amp > INT16_MAX)
+ return INT16_MAX;
+ return INT16_MIN;
+}
+/*- End of function --------------------------------------------------------*/
+
+/*! Saturate to 15 bits, rather than the usual 16 bits. This is often a useful function. */
+static __inline__ int16_t saturate15(int32_t amp)
+{
+ if (amp > 16383)
+ return 16383;
+ if (amp < -16384)
+ return -16384;
+ return (int16_t) amp;
+}
+/*- End of function --------------------------------------------------------*/
+
+static __inline__ int16_t fsaturatef(float famp)
+{
+ if (famp > (float) INT16_MAX)
+ return INT16_MAX;
+ if (famp < (float) INT16_MIN)
+ return INT16_MIN;
+ return (int16_t) rintf(famp);
+}
+/*- End of function --------------------------------------------------------*/
+
+static __inline__ int16_t fsaturate(double damp)
+{
+ if (damp > (double) INT16_MAX)
+ return INT16_MAX;
+ if (damp < (double) INT16_MIN)
+ return INT16_MIN;
+ return (int16_t) rint(damp);
+}
+/*- End of function --------------------------------------------------------*/
+
+static __inline__ float ffsaturatef(float famp)
+{
+ if (famp > (float) INT16_MAX)
+ return (float) INT16_MAX;
+ if (famp < (float) INT16_MIN)
+ return (float) INT16_MIN;
+ return famp;
+}
+/*- End of function --------------------------------------------------------*/
+
+static __inline__ double ffsaturate(double famp)
+{
+ if (famp > (double) INT16_MAX)
+ return (double) INT16_MAX;
+ if (famp < (double) INT16_MIN)
+ return (double) INT16_MIN;
+ return famp;
+}
+/*- End of function --------------------------------------------------------*/
+
+static __inline__ int16_t saturated_add16(int16_t a, int16_t b)
+{
+#if defined(__GNUC__) && defined(__i386__)
+ __asm__ __volatile__(
+ " addw %2,%0;\n"
+ " jno 0f;\n"
+ " movw $0x7fff,%0;\n"
+ " adcw $0,%0;\n"
+ "0:"
+ : "=r" (a)
+ : "0" (a), "ir" (b)
+ : "cc"
+ );
+ return a;
+#else
+ return saturate((int32_t) a + (int32_t) b);
+#endif
+}
+/*- End of function --------------------------------------------------------*/
+
+static __inline__ int32_t saturated_add32(int32_t a, int32_t b)
+{
+#if defined(__GNUC__) && defined(__i386__)
+ __asm__ __volatile__(
+ " addl %2,%0;\n"
+ " jno 0f;\n"
+ " movl $0x7fffffff,%0;\n"
+ " adcl $0,%0;\n"
+ "0:"
+ : "=r" (a)
+ : "0" (a), "ir" (b)
+ : "cc"
+ );
+ return a;
+#else
+ uint32_t A;
+
+ if (a < 0)
+ {
+ if (b >= 0)
+ return a + b;
+ /*endif*/
+ A = (uint32_t) -(a + 1) + (uint32_t) -(b + 1);
+ return (A >= INT32_MAX) ? INT32_MIN : -(int32_t) A - 2;
+ }
+ /*endif*/
+ if (b <= 0)
+ return a + b;
+ /*endif*/
+ A = (uint32_t) a + (uint32_t) b;
+ return (A > INT32_MAX) ? INT32_MAX : A;
+#endif
+}
+/*- End of function --------------------------------------------------------*/
+
+static __inline__ int16_t saturated_sub16(int16_t a, int16_t b)
+{
+ return saturate((int32_t) a - (int32_t) b);
+}
+/*- End of function --------------------------------------------------------*/
+
+static __inline__ int16_t saturated_mul16(int16_t a, int16_t b)
+{
+ if (a == INT16_MIN && b == INT16_MIN)
+ return INT16_MAX;
+ /*endif*/
+ return (int16_t) (((int32_t) a*(int32_t) b) >> 15);
+}
+/*- End of function --------------------------------------------------------*/
+
+static __inline__ int32_t saturated_mul_16_32(int16_t a, int16_t b)
+{
+ return ((int32_t) a*(int32_t) b) << 1;
+}
+/*- End of function --------------------------------------------------------*/
+
+static __inline__ int16_t saturated_abs16(int16_t a)
+{
+ return (a == INT16_MIN) ? INT16_MAX : (int16_t) abs(a);
+}
+/*- End of function --------------------------------------------------------*/
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif
+/*- End of file ------------------------------------------------------------*/
Modified: freeswitch/trunk/libs/spandsp/src/spandsp/version.h
==============================================================================
--- freeswitch/trunk/libs/spandsp/src/spandsp/version.h (original)
+++ freeswitch/trunk/libs/spandsp/src/spandsp/version.h Wed Oct 1 00:10:45 2008
@@ -30,8 +30,8 @@
/* The date and time of the version are in UTC form. */
-#define SPANDSP_RELEASE_DATE 20080928
-#define SPANDSP_RELEASE_TIME 144338
+#define SPANDSP_RELEASE_DATE 20080930
+#define SPANDSP_RELEASE_TIME 181513
#endif
/*- End of file ------------------------------------------------------------*/
1
0
01 Oct '08
Author: anthm
Date: Wed Oct 1 00:08:43 2008
New Revision: 9772
Modified:
freeswitch/trunk/libs/spandsp/.update
freeswitch/trunk/libs/spandsp/Makefile.am
freeswitch/trunk/libs/spandsp/spandsp.spec
freeswitch/trunk/libs/spandsp/spandsp.spec.in
freeswitch/trunk/libs/spandsp/src/spandsp/version.h
freeswitch/trunk/libs/spandsp/tests/g726_tests.c
Log:
update to snapshot spandsp-20080928.tar.gz
Modified: freeswitch/trunk/libs/spandsp/.update
==============================================================================
--- freeswitch/trunk/libs/spandsp/.update (original)
+++ freeswitch/trunk/libs/spandsp/.update Wed Oct 1 00:08:43 2008
@@ -1 +1 @@
-Wed Oct 1 00:06:28 EDT 2008
+Wed Oct 1 00:08:32 EDT 2008
Modified: freeswitch/trunk/libs/spandsp/Makefile.am
==============================================================================
--- freeswitch/trunk/libs/spandsp/Makefile.am (original)
+++ freeswitch/trunk/libs/spandsp/Makefile.am Wed Oct 1 00:08:43 2008
@@ -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.43 2008/09/20 15:44:40 steveu Exp $
+## $Id: Makefile.am,v 1.44 2008/09/28 14:36:25 steveu Exp $
AM_CFLAGS = $(COMP_VENDOR_CFLAGS)
AM_LDFLAGS = $(COMP_VENDOR_LDFLAGS)
@@ -73,7 +73,7 @@
rm -f rpm/SOURCES/*
rm -f rpm/SPECS/*
rm -f rpm/SRPMS/*
- rpm -ta --sign @PACKAGE@-@VERSION@.tar.gz
+ rpmbuild -ta --sign @PACKAGE@-@VERSION@.tar.gz
bump.rpm.release: spandsp.spec
VERSION="x"; \
Modified: freeswitch/trunk/libs/spandsp/spandsp.spec
==============================================================================
--- freeswitch/trunk/libs/spandsp/spandsp.spec (original)
+++ freeswitch/trunk/libs/spandsp/spandsp.spec Wed Oct 1 00:08:43 2008
@@ -2,18 +2,18 @@
Name: spandsp
Version: 0.0.5
Release: 1
-License: GPL
+License: LGPL
Group: System Environment/Libraries
URL: http://www.soft-switch.org/spandsp
BuildRoot: %{_tmppath}/%{name}-%{version}-root
Source: http://www.soft-switch.org/downloads/spandsp/spandsp-0.0.5.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
-Docdir: %{_prefix}/doc
-
BuildRequires: libtiff-devel
BuildRequires: audiofile-devel
BuildRequires: doxygen
+# for xsltproc:
+BuildRequires: libxslt
%description
SpanDSP is a library of DSP functions for telephony, in the 8000
@@ -56,8 +56,6 @@
%{_libdir}/libspandsp.so.*
-%{_datadir}/spandsp
-
%files devel
%defattr(-,root,root,-)
%doc doc/api
@@ -70,6 +68,10 @@
%postun -p /sbin/ldconfig
%changelog
+* Wed Sep 24 2008 Tzafrir Cohen <tzafrir.cohen(a)xorcom.com> 0.0.5-1
+- Preparing for 0.0.5pre4 release
+- License: LGPL
+
* Mon 23 Jun 2008 Steve Underwood <steveu(a)coppice.org> 0.0.5-1
- Cleared out the dependency on libxml2
Modified: freeswitch/trunk/libs/spandsp/spandsp.spec.in
==============================================================================
--- freeswitch/trunk/libs/spandsp/spandsp.spec.in (original)
+++ freeswitch/trunk/libs/spandsp/spandsp.spec.in Wed Oct 1 00:08:43 2008
@@ -2,18 +2,18 @@
Name: @PACKAGE@
Version: @VERSION@
Release: 1
-License: GPL
+License: LGPL
Group: System Environment/Libraries
URL: http://www.soft-switch.org/spandsp
BuildRoot: %{_tmppath}/%{name}-%{version}-root
Source: http://www.soft-switch.org/downloads/spandsp/@PACKAGE@-@VERSION@.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
-Docdir: %{_prefix}/doc
-
BuildRequires: libtiff-devel
BuildRequires: audiofile-devel
BuildRequires: doxygen
+# for xsltproc:
+BuildRequires: libxslt
%description
SpanDSP is a library of DSP functions for telephony, in the 8000
@@ -56,8 +56,6 @@
%{_libdir}/libspandsp.so.*
-%{_datadir}/spandsp
-
%files devel
%defattr(-,root,root,-)
%doc doc/api
@@ -70,6 +68,10 @@
%postun -p /sbin/ldconfig
%changelog
+* Wed Sep 24 2008 Tzafrir Cohen <tzafrir.cohen(a)xorcom.com> 0.0.5-1
+- Preparing for 0.0.5pre4 release
+- License: LGPL
+
* Mon 23 Jun 2008 Steve Underwood <steveu(a)coppice.org> 0.0.5-1
- Cleared out the dependency on libxml2
Modified: freeswitch/trunk/libs/spandsp/src/spandsp/version.h
==============================================================================
--- freeswitch/trunk/libs/spandsp/src/spandsp/version.h (original)
+++ freeswitch/trunk/libs/spandsp/src/spandsp/version.h Wed Oct 1 00:08:43 2008
@@ -30,8 +30,8 @@
/* The date and time of the version are in UTC form. */
-#define SPANDSP_RELEASE_DATE 20080920
-#define SPANDSP_RELEASE_TIME 154737
+#define SPANDSP_RELEASE_DATE 20080928
+#define SPANDSP_RELEASE_TIME 144338
#endif
/*- End of file ------------------------------------------------------------*/
Modified: freeswitch/trunk/libs/spandsp/tests/g726_tests.c
==============================================================================
--- freeswitch/trunk/libs/spandsp/tests/g726_tests.c (original)
+++ freeswitch/trunk/libs/spandsp/tests/g726_tests.c Wed Oct 1 00:08:43 2008
@@ -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: g726_tests.c,v 1.27 2008/08/29 09:28:13 steveu Exp $
+ * $Id: g726_tests.c,v 1.28 2008/09/28 14:36:25 steveu Exp $
*/
/*! \file */
@@ -1279,6 +1279,8 @@
}
printf("ADPCM packing is %d\n", packing);
+ //g726_init(&enc_state, bit_rate, G726_ENCODING_LINEAR, G726_PACKING_LEFT);
+ //g726_init(&dec_state, bit_rate, G726_ENCODING_LINEAR, G726_PACKING_RIGHT);
g726_init(&enc_state, bit_rate, G726_ENCODING_LINEAR, packing);
g726_init(&dec_state, bit_rate, G726_ENCODING_LINEAR, packing);
1
0
[commit] r9771 - in freeswitch/trunk/libs/spandsp: . doc src src/spandsp tests
by Freeswitch SVN 01 Oct '08
by Freeswitch SVN 01 Oct '08
01 Oct '08
Author: anthm
Date: Wed Oct 1 00:06:53 2008
New Revision: 9771
Added:
freeswitch/trunk/libs/spandsp/src/complex_vector_int.c
freeswitch/trunk/libs/spandsp/src/g722.c
freeswitch/trunk/libs/spandsp/src/libspandsp.vcproj
freeswitch/trunk/libs/spandsp/tests/complex_tests.c
freeswitch/trunk/libs/spandsp/tests/complex_vector_float_tests.c
freeswitch/trunk/libs/spandsp/tests/complex_vector_int_tests.c
Modified:
freeswitch/trunk/libs/spandsp/.update
freeswitch/trunk/libs/spandsp/Makefile.am
freeswitch/trunk/libs/spandsp/doc/Makefile.am
freeswitch/trunk/libs/spandsp/src/Makefile.am
freeswitch/trunk/libs/spandsp/src/spandsp/g722.h
freeswitch/trunk/libs/spandsp/src/spandsp/version.h
Log:
update to snapshot spandsp-20080920.tar.gz
Modified: freeswitch/trunk/libs/spandsp/.update
==============================================================================
--- freeswitch/trunk/libs/spandsp/.update (original)
+++ freeswitch/trunk/libs/spandsp/.update Wed Oct 1 00:06:53 2008
@@ -1 +1 @@
-Tue Sep 30 23:59:24 EDT 2008
+Wed Oct 1 00:06:28 EDT 2008
Modified: freeswitch/trunk/libs/spandsp/Makefile.am
==============================================================================
--- freeswitch/trunk/libs/spandsp/Makefile.am (original)
+++ freeswitch/trunk/libs/spandsp/Makefile.am Wed Oct 1 00:06:53 2008
@@ -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.40 2008/07/15 14:28:20 steveu Exp $
+## $Id: Makefile.am,v 1.43 2008/09/20 15:44:40 steveu Exp $
AM_CFLAGS = $(COMP_VENDOR_CFLAGS)
AM_LDFLAGS = $(COMP_VENDOR_LDFLAGS)
@@ -30,26 +30,10 @@
README.testdata \
spandsp.spec \
wrapper.xsl \
- libspandsp.vcproj \
unpack_g722_data.sh \
unpack_g726_data.sh \
unpack_gsm0610_data.sh \
unpack_v56ter_data.sh \
- doc/doxygen.in \
- src/floating_fudge.h \
- src/spandsp/version.h.in \
- src/libspandsp.dsp \
- src/libspandsp.sln \
- src/msvc/gettimeofday.c \
- src/msvc/inttypes.h \
- src/msvc/tgmath.h \
- src/msvc/unistd.h \
- src/msvc/sys/time.h \
- src/msvc/spandsp.def \
- src/msvc/msvcproj.head \
- src/msvc/msvcproj.foot \
- src/msvc/vc8proj.head \
- src/msvc/vc8proj.foot \
spandsp/global-tones.xml \
spandsp/tones.dtd \
spandsp/tsb85.xml \
Modified: freeswitch/trunk/libs/spandsp/doc/Makefile.am
==============================================================================
--- freeswitch/trunk/libs/spandsp/doc/Makefile.am (original)
+++ freeswitch/trunk/libs/spandsp/doc/Makefile.am Wed Oct 1 00:06:53 2008
@@ -16,11 +16,12 @@
## 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.11 2008/06/21 10:28:34 steveu Exp $
+## $Id: Makefile.am,v 1.12 2008/09/20 15:44:40 steveu Exp $
MAINTAINERCLEANFILES = Makefile.in
EXTRA_DIST = css.css \
+ doxygen.in \
t38-gateway.dia \
t38-terminal.dia \
t38_manual.xml \
Modified: freeswitch/trunk/libs/spandsp/src/Makefile.am
==============================================================================
--- freeswitch/trunk/libs/spandsp/src/Makefile.am (original)
+++ freeswitch/trunk/libs/spandsp/src/Makefile.am Wed Oct 1 00:06:53 2008
@@ -16,13 +16,29 @@
## 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.103 2008/09/19 14:02:05 steveu Exp $
+## $Id: Makefile.am,v 1.104 2008/09/20 15:44:40 steveu Exp $
AM_CFLAGS = $(COMP_VENDOR_CFLAGS)
AM_LDFLAGS = $(COMP_VENDOR_LDFLAGS)
MAINTAINERCLEANFILES = Makefile.in
+EXTRA_DIST = floating_fudge.h \
+ spandsp/version.h.in \
+ libspandsp.dsp \
+ libspandsp.sln \
+ libspandsp.vcproj \
+ msvc/gettimeofday.c \
+ msvc/inttypes.h \
+ msvc/tgmath.h \
+ msvc/unistd.h \
+ msvc/sys/time.h \
+ msvc/spandsp.def \
+ msvc/msvcproj.head \
+ msvc/msvcproj.foot \
+ msvc/vc8proj.head \
+ msvc/vc8proj.foot
+
INCLUDES = -I$(top_builddir)
lib_LTLIBRARIES = libspandsp.la
Added: freeswitch/trunk/libs/spandsp/src/complex_vector_int.c
==============================================================================
--- (empty file)
+++ freeswitch/trunk/libs/spandsp/src/complex_vector_int.c Wed Oct 1 00:06:53 2008
@@ -0,0 +1,113 @@
+/*
+ * SpanDSP - a series of DSP components for telephony
+ *
+ * complex_vector_int.c - Integer complex vector arithmetic routines.
+ *
+ * Written by Steve Underwood <steveu(a)coppice.org>
+ *
+ * Copyright (C) 2006 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: complex_vector_int.c,v 1.3 2008/09/18 13:54:32 steveu Exp $
+ */
+
+/*! \file */
+
+#if defined(HAVE_CONFIG_H)
+#include <config.h>
+#endif
+
+#include <inttypes.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include "floating_fudge.h"
+#if defined(HAVE_TGMATH_H)
+#include <tgmath.h>
+#endif
+#if defined(HAVE_MATH_H)
+#include <math.h>
+#endif
+#include <assert.h>
+
+#include "spandsp/telephony.h"
+#include "spandsp/logging.h"
+#include "spandsp/complex.h"
+#include "spandsp/vector_int.h"
+#include "spandsp/complex_vector_int.h"
+
+complexi32_t cvec_dot_prodi16(const complexi16_t x[], const complexi16_t y[], int n)
+{
+ int i;
+ complexi32_t z;
+
+ z = complex_seti32(0, 0);
+ for (i = 0; i < n; i++)
+ {
+ z.re += ((int32_t) x[i].re*(int32_t) y[i].re - (int32_t) x[i].im*(int32_t) y[i].im);
+ z.im += ((int32_t) x[i].re*(int32_t) y[i].im + (int32_t) x[i].im*(int32_t) y[i].re);
+ }
+ return z;
+}
+/*- End of function --------------------------------------------------------*/
+
+complexi32_t cvec_dot_prodi32(const complexi32_t x[], const complexi32_t y[], int n)
+{
+ int i;
+ complexi32_t z;
+
+ z = complex_seti32(0, 0);
+ for (i = 0; i < n; i++)
+ {
+ z.re += (x[i].re*y[i].re - x[i].im*y[i].im);
+ z.im += (x[i].re*y[i].im + x[i].im*y[i].re);
+ }
+ return z;
+}
+/*- End of function --------------------------------------------------------*/
+
+complexi32_t cvec_circular_dot_prodi16(const complexi16_t x[], const complexi16_t y[], int n, int pos)
+{
+ complexi32_t z;
+ complexi32_t z1;
+
+ z = cvec_dot_prodi16(&x[pos], &y[0], n - pos);
+ z1 = cvec_dot_prodi16(&x[0], &y[n - pos], pos);
+ z = complex_addi32(&z, &z1);
+ return z;
+}
+/*- End of function --------------------------------------------------------*/
+
+void cvec_lmsi16(const complexi16_t x[], complexi16_t y[], int n, const complexi16_t *error)
+{
+ int i;
+
+ for (i = 0; i < n; i++)
+ {
+ y[i].re += ((int32_t) x[i].im*(int32_t) error->im + (int32_t) x[i].re*(int32_t) error->re) >> 12;
+ y[i].im += ((int32_t) x[i].re*(int32_t) error->im - (int32_t) x[i].im*(int32_t) error->re) >> 12;
+ }
+}
+/*- End of function --------------------------------------------------------*/
+
+void cvec_circular_lmsi16(const complexi16_t x[], complexi16_t y[], int n, int pos, const complexi16_t *error)
+{
+ cvec_lmsi16(&x[pos], &y[0], n - pos, error);
+ cvec_lmsi16(&x[0], &y[n - pos], pos, error);
+}
+/*- End of function --------------------------------------------------------*/
+/*- End of file ------------------------------------------------------------*/
Added: freeswitch/trunk/libs/spandsp/src/g722.c
==============================================================================
--- (empty file)
+++ freeswitch/trunk/libs/spandsp/src/g722.c Wed Oct 1 00:06:53 2008
@@ -0,0 +1,609 @@
+/*
+ * SpanDSP - a series of DSP components for telephony
+ *
+ * g722.c - The ITU G.722 codec.
+ *
+ * Written by Steve Underwood <steveu(a)coppice.org>
+ *
+ * Copyright (C) 2005 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.
+ *
+ * Based in part on a single channel G.722 codec which is:
+ *
+ * Copyright (c) CMU 1993
+ * Computer Science, Speech Group
+ * Chengxiang Lu and Alex Hauptmann
+ *
+ * $Id: g722.c,v 1.2 2008/09/19 16:24:25 steveu Exp $
+ */
+
+/*! \file */
+
+#if defined(HAVE_CONFIG_H)
+#include <config.h>
+#endif
+
+#include <inttypes.h>
+#include <memory.h>
+#include <stdlib.h>
+#include "floating_fudge.h"
+#if defined(HAVE_TGMATH_H)
+#include <tgmath.h>
+#endif
+#if defined(HAVE_MATH_H)
+#include <math.h>
+#endif
+
+#include "spandsp/telephony.h"
+#include "spandsp/saturated.h"
+#include "spandsp/vector_int.h"
+#include "spandsp/g722.h"
+
+static const int16_t qmf_coeffs_fwd[12] =
+{
+ 3, -11, 12, 32, -210, 951, 3876, -805, 362, -156, 53, -11,
+};
+
+static const int16_t qmf_coeffs_rev[12] =
+{
+ -11, 53, -156, 362, -805, 3876, 951, -210, 32, 12, -11, 3
+};
+
+static const int16_t qm2[4] =
+{
+ -7408, -1616, 7408, 1616
+};
+
+static const int16_t qm4[16] =
+{
+ 0, -20456, -12896, -8968,
+ -6288, -4240, -2584, -1200,
+ 20456, 12896, 8968, 6288,
+ 4240, 2584, 1200, 0
+};
+
+static const int16_t qm5[32] =
+{
+ -280, -280, -23352, -17560,
+ -14120, -11664, -9752, -8184,
+ -6864, -5712, -4696, -3784,
+ -2960, -2208, -1520, -880,
+ 23352, 17560, 14120, 11664,
+ 9752, 8184, 6864, 5712,
+ 4696, 3784, 2960, 2208,
+ 1520, 880, 280, -280
+};
+
+static const int16_t qm6[64] =
+{
+ -136, -136, -136, -136,
+ -24808, -21904, -19008, -16704,
+ -14984, -13512, -12280, -11192,
+ -10232, -9360, -8576, -7856,
+ -7192, -6576, -6000, -5456,
+ -4944, -4464, -4008, -3576,
+ -3168, -2776, -2400, -2032,
+ -1688, -1360, -1040, -728,
+ 24808, 21904, 19008, 16704,
+ 14984, 13512, 12280, 11192,
+ 10232, 9360, 8576, 7856,
+ 7192, 6576, 6000, 5456,
+ 4944, 4464, 4008, 3576,
+ 3168, 2776, 2400, 2032,
+ 1688, 1360, 1040, 728,
+ 432, 136, -432, -136
+};
+
+static const int16_t q6[32] =
+{
+ 0, 35, 72, 110,
+ 150, 190, 233, 276,
+ 323, 370, 422, 473,
+ 530, 587, 650, 714,
+ 786, 858, 940, 1023,
+ 1121, 1219, 1339, 1458,
+ 1612, 1765, 1980, 2195,
+ 2557, 2919, 0, 0
+};
+
+static const int16_t ilb[32] =
+{
+ 2048, 2093, 2139, 2186,
+ 2233, 2282, 2332, 2383,
+ 2435, 2489, 2543, 2599,
+ 2656, 2714, 2774, 2834,
+ 2896, 2960, 3025, 3091,
+ 3158, 3228, 3298, 3371,
+ 3444, 3520, 3597, 3676,
+ 3756, 3838, 3922, 4008
+};
+
+static const int16_t iln[32] =
+{
+ 0, 63, 62, 31, 30, 29, 28, 27,
+ 26, 25, 24, 23, 22, 21, 20, 19,
+ 18, 17, 16, 15, 14, 13, 12, 11,
+ 10, 9, 8, 7, 6, 5, 4, 0
+};
+
+static const int16_t ilp[32] =
+{
+ 0, 61, 60, 59, 58, 57, 56, 55,
+ 54, 53, 52, 51, 50, 49, 48, 47,
+ 46, 45, 44, 43, 42, 41, 40, 39,
+ 38, 37, 36, 35, 34, 33, 32, 0
+};
+
+static const int16_t ihn[3] =
+{
+ 0, 1, 0
+};
+
+static const int16_t ihp[3] =
+{
+ 0, 3, 2
+};
+
+static const int16_t wl[8] =
+{
+ -60, -30, 58, 172, 334, 538, 1198, 3042
+};
+
+static const int16_t rl42[16] =
+{
+ 0, 7, 6, 5, 4, 3, 2, 1,
+ 7, 6, 5, 4, 3, 2, 1, 0
+};
+
+static const int16_t wh[3] =
+{
+ 0, -214, 798
+};
+
+static const int16_t rh2[4] =
+{
+ 2, 1, 2, 1
+};
+
+static void block4(g722_band_t *s, int16_t dx)
+{
+ int16_t wd1;
+ int16_t wd2;
+ int16_t wd3;
+ int16_t sp;
+ int16_t r;
+ int16_t p;
+ int16_t ap[2];
+ int32_t wd32;
+ int32_t sz;
+ int i;
+
+ /* RECONS */
+ r = saturated_add16(s->s, dx);
+ /* PARREC */
+ p = saturated_add16(s->sz, dx);
+
+ /* UPPOL2 */
+ wd1 = saturate((int32_t) s->a[0] << 2);
+ wd32 = ((p ^ s->p[0]) & 0x8000) ? wd1 : -wd1;
+ if (wd32 > 32767)
+ wd32 = 32767;
+ wd3 = (((p ^ s->p[1]) & 0x8000) ? -128 : 128)
+ + (wd32 >> 7)
+ + (((int32_t) s->a[1]*(int32_t) 32512) >> 15);
+ if (abs(wd3) > 12288)
+ wd3 = (wd3 < 0) ? -12288 : 12288;
+ ap[1] = wd3;
+
+ /* UPPOL1 */
+ wd1 = ((p ^ s->p[0]) & 0x8000) ? -192 : 192;
+ wd2 = ((int32_t) s->a[0]*(int32_t) 32640) >> 15;
+ ap[0] = saturated_add16(wd1, wd2);
+
+ wd3 = saturated_sub16(15360, ap[1]);
+ if (abs(ap[0]) > wd3)
+ ap[0] = (ap[0] < 0) ? -wd3 : wd3;
+
+ /* FILTEP */
+ wd1 = saturated_add16(r, r);
+ wd1 = ((int32_t) ap[0]*(int32_t) wd1) >> 15;
+ wd2 = saturated_add16(s->r, s->r);
+ wd2 = ((int32_t) ap[1]*(int32_t) wd2) >> 15;
+ sp = saturated_add16(wd1, wd2);
+ s->r = r;
+ s->a[1] = ap[1];
+ s->a[0] = ap[0];
+ s->p[1] = s->p[0];
+ s->p[0] = p;
+
+ /* UPZERO */
+ /* DELAYA */
+ /* FILTEZ */
+ wd1 = (dx == 0) ? 0 : 128;
+ s->d[0] = dx;
+ sz = 0;
+ for (i = 5; i >= 0; i--)
+ {
+ wd2 = ((s->d[i + 1] ^ dx) & 0x8000) ? -wd1 : wd1;
+ wd3 = ((int32_t) s->b[i]*(int32_t) 32640) >> 15;
+ s->b[i] = saturated_add16(wd2, wd3);
+ wd3 = saturated_add16(s->d[i], s->d[i]);
+ sz += ((int32_t) s->b[i]*(int32_t) wd3) >> 15;
+ s->d[i + 1] = s->d[i];
+ }
+ s->sz = saturate(sz);
+
+ /* PREDIC */
+ s->s = saturated_add16(sp, s->sz);
+}
+/*- End of function --------------------------------------------------------*/
+
+g722_decode_state_t *g722_decode_init(g722_decode_state_t *s, int rate, int options)
+{
+ if (s == NULL)
+ {
+ if ((s = (g722_decode_state_t *) malloc(sizeof(*s))) == NULL)
+ return NULL;
+ }
+ memset(s, 0, sizeof(*s));
+ if (rate == 48000)
+ s->bits_per_sample = 6;
+ else if (rate == 56000)
+ s->bits_per_sample = 7;
+ else
+ s->bits_per_sample = 8;
+ if ((options & G722_SAMPLE_RATE_8000))
+ s->eight_k = TRUE;
+ if ((options & G722_PACKED) && s->bits_per_sample != 8)
+ s->packed = TRUE;
+ else
+ s->packed = FALSE;
+ s->band[0].det = 32;
+ s->band[1].det = 8;
+ return s;
+}
+/*- End of function --------------------------------------------------------*/
+
+int g722_decode_release(g722_decode_state_t *s)
+{
+ free(s);
+ return 0;
+}
+/*- End of function --------------------------------------------------------*/
+
+int g722_decode(g722_decode_state_t *s, int16_t amp[], const uint8_t g722_data[], int len)
+{
+ int rlow;
+ int ihigh;
+ int16_t dlow;
+ int16_t dhigh;
+ int rhigh;
+ int wd1;
+ int wd2;
+ int wd3;
+ int code;
+ int outlen;
+ int j;
+
+ outlen = 0;
+ rhigh = 0;
+ for (j = 0; j < len; )
+ {
+ if (s->packed)
+ {
+ /* Unpack the code bits */
+ if (s->in_bits < s->bits_per_sample)
+ {
+ s->in_buffer |= (g722_data[j++] << s->in_bits);
+ s->in_bits += 8;
+ }
+ code = s->in_buffer & ((1 << s->bits_per_sample) - 1);
+ s->in_buffer >>= s->bits_per_sample;
+ s->in_bits -= s->bits_per_sample;
+ }
+ else
+ {
+ code = g722_data[j++];
+ }
+
+ switch (s->bits_per_sample)
+ {
+ default:
+ case 8:
+ wd1 = code & 0x3F;
+ ihigh = (code >> 6) & 0x03;
+ wd2 = qm6[wd1];
+ wd1 >>= 2;
+ break;
+ case 7:
+ wd1 = code & 0x1F;
+ ihigh = (code >> 5) & 0x03;
+ wd2 = qm5[wd1];
+ wd1 >>= 1;
+ break;
+ case 6:
+ wd1 = code & 0x0F;
+ ihigh = (code >> 4) & 0x03;
+ wd2 = qm4[wd1];
+ break;
+ }
+ /* Block 5L, LOW BAND INVQBL */
+ wd2 = ((int32_t) s->band[0].det*(int32_t) wd2) >> 15;
+ /* Block 5L, RECONS */
+ /* Block 6L, LIMIT */
+ rlow = saturate15(s->band[0].s + wd2);
+
+ /* Block 2L, INVQAL */
+ wd2 = qm4[wd1];
+ dlow = ((int32_t) s->band[0].det*(int32_t) wd2) >> 15;
+
+ /* Block 3L, LOGSCL */
+ wd2 = rl42[wd1];
+ wd1 = ((int32_t) s->band[0].nb*(int32_t) 127) >> 7;
+ wd1 += wl[wd2];
+ if (wd1 < 0)
+ wd1 = 0;
+ else if (wd1 > 18432)
+ wd1 = 18432;
+ s->band[0].nb = wd1;
+
+ /* Block 3L, SCALEL */
+ wd1 = (s->band[0].nb >> 6) & 31;
+ wd2 = 8 - (s->band[0].nb >> 11);
+ wd3 = (wd2 < 0) ? (ilb[wd1] << -wd2) : (ilb[wd1] >> wd2);
+ s->band[0].det = wd3 << 2;
+
+ block4(&s->band[0], dlow);
+
+ if (!s->eight_k)
+ {
+ /* Block 2H, INVQAH */
+ wd2 = qm2[ihigh];
+ dhigh = ((int32_t) s->band[1].det*(int32_t) wd2) >> 15;
+ /* Block 5H, RECONS */
+ /* Block 6H, LIMIT */
+ rhigh = saturate15(dhigh + s->band[1].s);
+
+ /* Block 2H, INVQAH */
+ wd2 = rh2[ihigh];
+ wd1 = ((int32_t) s->band[1].nb*(int32_t) 127) >> 7;
+ wd1 += wh[wd2];
+ if (wd1 < 0)
+ wd1 = 0;
+ else if (wd1 > 22528)
+ wd1 = 22528;
+ s->band[1].nb = wd1;
+
+ /* Block 3H, SCALEH */
+ wd1 = (s->band[1].nb >> 6) & 31;
+ wd2 = 10 - (s->band[1].nb >> 11);
+ wd3 = (wd2 < 0) ? (ilb[wd1] << -wd2) : (ilb[wd1] >> wd2);
+ s->band[1].det = wd3 << 2;
+
+ block4(&s->band[1], dhigh);
+ }
+
+ if (s->itu_test_mode)
+ {
+ amp[outlen++] = (int16_t) (rlow << 1);
+ amp[outlen++] = (int16_t) (rhigh << 1);
+ }
+ else
+ {
+ if (s->eight_k)
+ {
+ amp[outlen++] = (int16_t) rlow;
+ }
+ else
+ {
+ /* Apply the QMF to build the final signal */
+ s->x[s->ptr] = rlow + rhigh;
+ s->y[s->ptr] = rlow - rhigh;
+ if (++s->ptr >= 12)
+ s->ptr = 0;
+ amp[outlen++] = (int16_t) (vec_circular_dot_prodi16(s->y, qmf_coeffs_rev, 12, s->ptr) >> 12);
+ amp[outlen++] = (int16_t) (vec_circular_dot_prodi16(s->x, qmf_coeffs_fwd, 12, s->ptr) >> 12);
+ }
+ }
+ }
+ return outlen;
+}
+/*- End of function --------------------------------------------------------*/
+
+g722_encode_state_t *g722_encode_init(g722_encode_state_t *s, int rate, int options)
+{
+ if (s == NULL)
+ {
+ if ((s = (g722_encode_state_t *) malloc(sizeof(*s))) == NULL)
+ return NULL;
+ }
+ memset(s, 0, sizeof(*s));
+ if (rate == 48000)
+ s->bits_per_sample = 6;
+ else if (rate == 56000)
+ s->bits_per_sample = 7;
+ else
+ s->bits_per_sample = 8;
+ if ((options & G722_SAMPLE_RATE_8000))
+ s->eight_k = TRUE;
+ if ((options & G722_PACKED) && s->bits_per_sample != 8)
+ s->packed = TRUE;
+ else
+ s->packed = FALSE;
+ s->band[0].det = 32;
+ s->band[1].det = 8;
+ return s;
+}
+/*- End of function --------------------------------------------------------*/
+
+int g722_encode_release(g722_encode_state_t *s)
+{
+ free(s);
+ return 0;
+}
+/*- End of function --------------------------------------------------------*/
+
+int g722_encode(g722_encode_state_t *s, uint8_t g722_data[], const int16_t amp[], int len)
+{
+ int16_t dlow;
+ int16_t dhigh;
+ int el;
+ int wd;
+ int wd1;
+ int ril;
+ int wd2;
+ int il4;
+ int ih2;
+ int wd3;
+ int eh;
+ int g722_bytes;
+ int ihigh;
+ int ilow;
+ int code;
+ /* Low and high band PCM from the QMF */
+ int16_t xlow;
+ int16_t xhigh;
+ int32_t sumeven;
+ int32_t sumodd;
+ int mih;
+ int i;
+ int j;
+
+ g722_bytes = 0;
+ xhigh = 0;
+ for (j = 0; j < len; )
+ {
+ if (s->itu_test_mode)
+ {
+ xlow =
+ xhigh = amp[j++] >> 1;
+ }
+ else
+ {
+ if (s->eight_k)
+ {
+ xlow = amp[j++];
+ }
+ else
+ {
+ /* Apply the transmit QMF */
+ s->x[s->ptr] = amp[j++];
+ s->y[s->ptr] = amp[j++];
+ if (++s->ptr >= 12)
+ s->ptr = 0;
+ sumodd = vec_circular_dot_prodi16(s->x, qmf_coeffs_fwd, 12, s->ptr);
+ sumeven = vec_circular_dot_prodi16(s->y, qmf_coeffs_rev, 12, s->ptr);
+ xlow = (sumeven + sumodd) >> 13;
+ xhigh = (sumeven - sumodd) >> 13;
+ }
+ }
+ /* Block 1L, SUBTRA */
+ el = saturated_sub16(xlow, s->band[0].s);
+
+ /* Block 1L, QUANTL */
+ wd = (el >= 0) ? el : ~el;
+
+ for (i = 1; i < 30; i++)
+ {
+ wd1 = ((int32_t) q6[i]*(int32_t) s->band[0].det) >> 12;
+ if (wd < wd1)
+ break;
+ }
+ ilow = (el < 0) ? iln[i] : ilp[i];
+
+ /* Block 2L, INVQAL */
+ ril = ilow >> 2;
+ wd2 = qm4[ril];
+ dlow = ((int32_t) s->band[0].det*(int32_t) wd2) >> 15;
+
+ /* Block 3L, LOGSCL */
+ il4 = rl42[ril];
+ wd = ((int32_t) s->band[0].nb*(int32_t) 127) >> 7;
+ s->band[0].nb = wd + wl[il4];
+ if (s->band[0].nb < 0)
+ s->band[0].nb = 0;
+ else if (s->band[0].nb > 18432)
+ s->band[0].nb = 18432;
+
+ /* Block 3L, SCALEL */
+ wd1 = (s->band[0].nb >> 6) & 31;
+ wd2 = 8 - (s->band[0].nb >> 11);
+ wd3 = (wd2 < 0) ? (ilb[wd1] << -wd2) : (ilb[wd1] >> wd2);
+ s->band[0].det = wd3 << 2;
+
+ block4(&s->band[0], dlow);
+
+ if (s->eight_k)
+ {
+ /* Just leave the high bits as zero */
+ code = (0xC0 | ilow) >> (8 - s->bits_per_sample);
+ }
+ else
+ {
+ /* Block 1H, SUBTRA */
+ eh = saturated_sub16(xhigh, s->band[1].s);
+
+ /* Block 1H, QUANTH */
+ wd = (eh >= 0) ? eh : ~eh;
+ wd1 = (564*s->band[1].det) >> 12;
+ mih = (wd >= wd1) ? 2 : 1;
+ ihigh = (eh < 0) ? ihn[mih] : ihp[mih];
+
+ /* Block 2H, INVQAH */
+ wd2 = qm2[ihigh];
+ dhigh = ((int32_t) s->band[1].det*(int32_t) wd2) >> 15;
+
+ /* Block 3H, LOGSCH */
+ ih2 = rh2[ihigh];
+ wd = ((int32_t) s->band[1].nb*(int32_t) 127) >> 7;
+ s->band[1].nb = wd + wh[ih2];
+ if (s->band[1].nb < 0)
+ s->band[1].nb = 0;
+ else if (s->band[1].nb > 22528)
+ s->band[1].nb = 22528;
+
+ /* Block 3H, SCALEH */
+ wd1 = (s->band[1].nb >> 6) & 31;
+ wd2 = 10 - (s->band[1].nb >> 11);
+ wd3 = (wd2 < 0) ? (ilb[wd1] << -wd2) : (ilb[wd1] >> wd2);
+ s->band[1].det = wd3 << 2;
+
+ block4(&s->band[1], dhigh);
+ code = ((ihigh << 6) | ilow) >> (8 - s->bits_per_sample);
+ }
+
+ if (s->packed)
+ {
+ /* Pack the code bits */
+ s->out_buffer |= (code << s->out_bits);
+ s->out_bits += s->bits_per_sample;
+ if (s->out_bits >= 8)
+ {
+ g722_data[g722_bytes++] = (uint8_t) (s->out_buffer & 0xFF);
+ s->out_bits -= 8;
+ s->out_buffer >>= 8;
+ }
+ }
+ else
+ {
+ g722_data[g722_bytes++] = (uint8_t) code;
+ }
+ }
+ return g722_bytes;
+}
+/*- End of function --------------------------------------------------------*/
+/*- End of file ------------------------------------------------------------*/
Added: freeswitch/trunk/libs/spandsp/src/libspandsp.vcproj
==============================================================================
--- (empty file)
+++ freeswitch/trunk/libs/spandsp/src/libspandsp.vcproj Wed Oct 1 00:06:53 2008
@@ -0,0 +1,348 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C"
+ Version="9.00"
+ Name="libspandsp"
+ ProjectGUID="{CF70F278-3364-4395-A2E1-23501C9B8AD2}"
+ RootNamespace="libspandsp"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="2"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="src; src\spandsp; src\msvc;..\libtiff\include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBSPANDSP_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;HAVE_MATH_H;HAVE_TGMATH_H"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ CompileAs="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="2"
+ ModuleDefinitionFile="src/msvc/spandsp.def"
+ GenerateDebugInformation="true"
+ SubSystem="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="2"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="src; src\spandsp; src\msvc;..\libtiff\include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBSPANDSP_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;HAVE_MATH_H;HAVE_TGMATH_H"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="1"
+ ModuleDefinitionFile="src/msvc/spandsp.def"
+ GenerateDebugInformation="true"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+<File RelativePath="adsi.c"></File>
+<File RelativePath="async.c"></File>
+<File RelativePath="at_interpreter.c"></File>
+<File RelativePath="awgn.c"></File>
+<File RelativePath="bell_r2_mf.c"></File>
+<File RelativePath="bert.c"></File>
+<File RelativePath="bit_operations.c"></File>
+<File RelativePath="bitstream.c"></File>
+<File RelativePath="complex_filters.c"></File>
+<File RelativePath="complex_vector_float.c"></File>
+<File RelativePath="complex_vector_int.c"></File>
+<File RelativePath="crc.c"></File>
+<File RelativePath="dds_float.c"></File>
+<File RelativePath="dds_int.c"></File>
+<File RelativePath="dtmf.c"></File>
+<File RelativePath="echo.c"></File>
+<File RelativePath="fax.c"></File>
+<File RelativePath="fsk.c"></File>
+<File RelativePath="g711.c"></File>
+<File RelativePath="g722.c"></File>
+<File RelativePath="g726.c"></File>
+<File RelativePath="gsm0610_decode.c"></File>
+<File RelativePath="gsm0610_encode.c"></File>
+<File RelativePath="gsm0610_long_term.c"></File>
+<File RelativePath="gsm0610_lpc.c"></File>
+<File RelativePath="gsm0610_preprocess.c"></File>
+<File RelativePath="gsm0610_rpe.c"></File>
+<File RelativePath="gsm0610_short_term.c"></File>
+<File RelativePath="hdlc.c"></File>
+<File RelativePath="ima_adpcm.c"></File>
+<File RelativePath="logging.c"></File>
+<File RelativePath="lpc10_analyse.c"></File>
+<File RelativePath="lpc10_decode.c"></File>
+<File RelativePath="lpc10_encode.c"></File>
+<File RelativePath="lpc10_placev.c"></File>
+<File RelativePath="lpc10_voicing.c"></File>
+<File RelativePath="modem_echo.c"></File>
+<File RelativePath="modem_connect_tones.c"></File>
+<File RelativePath="noise.c"></File>
+<File RelativePath="oki_adpcm.c"></File>
+<File RelativePath="playout.c"></File>
+<File RelativePath="plc.c"></File>
+<File RelativePath="power_meter.c"></File>
+<File RelativePath="queue.c"></File>
+<File RelativePath="schedule.c"></File>
+<File RelativePath="sig_tone.c"></File>
+<File RelativePath="silence_gen.c"></File>
+<File RelativePath="super_tone_rx.c"></File>
+<File RelativePath="super_tone_tx.c"></File>
+<File RelativePath="t4.c"></File>
+<File RelativePath="t30.c"></File>
+<File RelativePath="t30_api.c"></File>
+<File RelativePath="t30_logging.c"></File>
+<File RelativePath="t31.c"></File>
+<File RelativePath="t35.c"></File>
+<File RelativePath="t38_core.c"></File>
+<File RelativePath="t38_gateway.c"></File>
+<File RelativePath="t38_non_ecm_buffer.c"></File>
+<File RelativePath="t38_terminal.c"></File>
+<File RelativePath="testcpuid.c"></File>
+<File RelativePath="time_scale.c"></File>
+<File RelativePath="tone_detect.c"></File>
+<File RelativePath="tone_generate.c"></File>
+<File RelativePath="v17rx.c"></File>
+<File RelativePath="v17tx.c"></File>
+<File RelativePath="v22bis_rx.c"></File>
+<File RelativePath="v22bis_tx.c"></File>
+<File RelativePath="v27ter_rx.c"></File>
+<File RelativePath="v27ter_tx.c"></File>
+<File RelativePath="v29rx.c"></File>
+<File RelativePath="v29tx.c"></File>
+<File RelativePath="v42.c"></File>
+<File RelativePath="v42bis.c"></File>
+<File RelativePath="v8.c"></File>
+<File RelativePath="vector_float.c"></File>
+<File RelativePath="vector_int.c"></File>
+<File RelativePath="msvc/gettimeofday.c"></File>
+</Filter><Filter Name="Header Files">
+<File RelativePath="spandsp/adsi.h"></File>
+<File RelativePath="spandsp/async.h"></File>
+<File RelativePath="spandsp/arctan2.h"></File>
+<File RelativePath="spandsp/at_interpreter.h"></File>
+<File RelativePath="spandsp/awgn.h"></File>
+<File RelativePath="spandsp/bell_r2_mf.h"></File>
+<File RelativePath="spandsp/bert.h"></File>
+<File RelativePath="spandsp/biquad.h"></File>
+<File RelativePath="spandsp/bit_operations.h"></File>
+<File RelativePath="spandsp/bitstream.h"></File>
+<File RelativePath="spandsp/crc.h"></File>
+<File RelativePath="spandsp/complex.h"></File>
+<File RelativePath="spandsp/complex_filters.h"></File>
+<File RelativePath="spandsp/complex_vector_float.h"></File>
+<File RelativePath="spandsp/complex_vector_int.h"></File>
+<File RelativePath="spandsp/dc_restore.h"></File>
+<File RelativePath="spandsp/dds.h"></File>
+<File RelativePath="spandsp/dtmf.h"></File>
+<File RelativePath="spandsp/echo.h"></File>
+<File RelativePath="spandsp/fax.h"></File>
+<File RelativePath="spandsp/fax_modems.h"></File>
+<File RelativePath="spandsp/fir.h"></File>
+<File RelativePath="spandsp/fsk.h"></File>
+<File RelativePath="spandsp/g168models.h"></File>
+<File RelativePath="spandsp/g711.h"></File>
+<File RelativePath="spandsp/g722.h"></File>
+<File RelativePath="spandsp/g726.h"></File>
+<File RelativePath="spandsp/gsm0610.h"></File>
+<File RelativePath="spandsp/hdlc.h"></File>
+<File RelativePath="spandsp/ima_adpcm.h"></File>
+<File RelativePath="spandsp/logging.h"></File>
+<File RelativePath="spandsp/lpc10.h"></File>
+<File RelativePath="spandsp/modem_echo.h"></File>
+<File RelativePath="spandsp/modem_connect_tones.h"></File>
+<File RelativePath="spandsp/noise.h"></File>
+<File RelativePath="spandsp/oki_adpcm.h"></File>
+<File RelativePath="spandsp/playout.h"></File>
+<File RelativePath="spandsp/plc.h"></File>
+<File RelativePath="spandsp/power_meter.h"></File>
+<File RelativePath="spandsp/queue.h"></File>
+<File RelativePath="spandsp/schedule.h"></File>
+<File RelativePath="spandsp/sig_tone.h"></File>
+<File RelativePath="spandsp/silence_gen.h"></File>
+<File RelativePath="spandsp/super_tone_rx.h"></File>
+<File RelativePath="spandsp/super_tone_tx.h"></File>
+<File RelativePath="spandsp/t4.h"></File>
+<File RelativePath="spandsp/t30.h"></File>
+<File RelativePath="spandsp/t30_api.h"></File>
+<File RelativePath="spandsp/t30_fcf.h"></File>
+<File RelativePath="spandsp/t30_logging.h"></File>
+<File RelativePath="spandsp/t31.h"></File>
+<File RelativePath="spandsp/t35.h"></File>
+<File RelativePath="spandsp/t38_core.h"></File>
+<File RelativePath="spandsp/t38_gateway.h"></File>
+<File RelativePath="spandsp/t38_non_ecm_buffer.h"></File>
+<File RelativePath="spandsp/t38_terminal.h"></File>
+<File RelativePath="spandsp/telephony.h"></File>
+<File RelativePath="spandsp/time_scale.h"></File>
+<File RelativePath="spandsp/timing.h"></File>
+<File RelativePath="spandsp/tone_detect.h"></File>
+<File RelativePath="spandsp/tone_generate.h"></File>
+<File RelativePath="spandsp/v17rx.h"></File>
+<File RelativePath="spandsp/v17tx.h"></File>
+<File RelativePath="spandsp/v22bis.h"></File>
+<File RelativePath="spandsp/v27ter_rx.h"></File>
+<File RelativePath="spandsp/v27ter_tx.h"></File>
+<File RelativePath="spandsp/v29rx.h"></File>
+<File RelativePath="spandsp/v29tx.h"></File>
+<File RelativePath="spandsp/v42.h"></File>
+<File RelativePath="spandsp/v42bis.h"></File>
+<File RelativePath="spandsp/v8.h"></File>
+<File RelativePath="spandsp/vector_float.h"></File>
+<File RelativePath="spandsp/vector_int.h"></File>
+<File RelativePath="spandsp/version.h"></File>
+<File RelativePath="spandsp.h"></File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+ >
+ </Filter>
+ <File
+ RelativePath=".\src\msvc\spandsp.def"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
Modified: freeswitch/trunk/libs/spandsp/src/spandsp/g722.h
==============================================================================
--- freeswitch/trunk/libs/spandsp/src/spandsp/g722.h (original)
+++ freeswitch/trunk/libs/spandsp/src/spandsp/g722.h Wed Oct 1 00:06:53 2008
@@ -28,7 +28,7 @@
* Computer Science, Speech Group
* Chengxiang Lu and Alex Hauptmann
*
- * $Id: g722.h,v 1.20 2008/09/19 14:02:05 steveu Exp $
+ * $Id: g722.h,v 1.21 2008/09/19 16:24:25 steveu Exp $
*/
@@ -59,15 +59,15 @@
/*! The per band parameters for both encoding and decoding G.722 */
typedef struct
{
+ int16_t nb;
+ int16_t det;
int16_t s;
int16_t sz;
- int16_t r[3];
- int16_t a[3];
- int16_t p[3];
+ int16_t r;
+ int16_t p[2];
+ int16_t a[2];
+ int16_t b[6];
int16_t d[7];
- int16_t b[7];
- int16_t nb;
- int16_t det;
} g722_band_t;
typedef struct
Modified: freeswitch/trunk/libs/spandsp/src/spandsp/version.h
==============================================================================
--- freeswitch/trunk/libs/spandsp/src/spandsp/version.h (original)
+++ freeswitch/trunk/libs/spandsp/src/spandsp/version.h Wed Oct 1 00:06:53 2008
@@ -30,8 +30,8 @@
/* The date and time of the version are in UTC form. */
-#define SPANDSP_RELEASE_DATE 20080919
-#define SPANDSP_RELEASE_TIME 142905
+#define SPANDSP_RELEASE_DATE 20080920
+#define SPANDSP_RELEASE_TIME 154737
#endif
/*- End of file ------------------------------------------------------------*/
Added: freeswitch/trunk/libs/spandsp/tests/complex_tests.c
==============================================================================
--- (empty file)
+++ freeswitch/trunk/libs/spandsp/tests/complex_tests.c Wed Oct 1 00:06:53 2008
@@ -0,0 +1,81 @@
+/*
+ * SpanDSP - a series of DSP components for telephony
+ *
+ * complex.c
+ *
+ * Written by Steve Underwood <steveu(a)coppice.org>
+ *
+ * Copyright (C) 2008 Steve Underwood
+ *
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2, 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * $Id: complex_tests.c,v 1.1 2008/09/18 12:09:51 steveu Exp $
+ */
+
+/*! \page complex_tests_page Complex arithmetic tests
+\section complex_tests_page_sec_1 What does it do?
+
+\section complex_tests_page_sec_2 How is it used?
+*/
+
+#if defined(HAVE_CONFIG_H)
+#include "config.h"
+#endif
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <fcntl.h>
+#include <string.h>
+#include "floating_fudge.h"
+#if defined(HAVE_TGMATH_H)
+#include <tgmath.h>
+#endif
+#if defined(HAVE_MATH_H)
+#include <math.h>
+#endif
+#include <assert.h>
+
+#include "spandsp.h"
+
+int main(int argc, char *argv[])
+{
+ complexf_t fa;
+ complexf_t fb;
+ complexf_t fz;
+ complexi16_t i16a;
+ complexi16_t i16b;
+ complexi16_t i16z;
+#if 0
+ complexi32_t i32a;
+ complexi32_t i32b;
+ complexi32_t i32z;
+#endif
+
+ fa = complex_setf(0.5f, 0.25f);
+ fb = complex_setf(0.25f, 0.5f);
+ fz = complex_mulf(&fa, &fb);
+ printf("(%f, %f) * (%f, %f) => (%f, %f)\n", fa.re, fa.im, fb.re, fb.im, fz.re, fz.im);
+
+ i16a = complex_seti16(16383, 8191);
+ i16b = complex_seti16(8191, 16383);
+ i16z = complex_mul_q1_15(&i16a, &i16b);
+ printf("(%f, %f) * (%f, %f) => (%f, %f)\n", i16a.re/32768.0, i16a.im/32768.0, i16b.re/32768.0, i16b.im/32768.0, i16z.re/32768.0, i16z.im/32768.0);
+
+ printf("Tests passed.\n");
+ return 0;
+}
+/*- End of function --------------------------------------------------------*/
+/*- End of file ------------------------------------------------------------*/
Added: freeswitch/trunk/libs/spandsp/tests/complex_vector_float_tests.c
==============================================================================
--- (empty file)
+++ freeswitch/trunk/libs/spandsp/tests/complex_vector_float_tests.c Wed Oct 1 00:06:53 2008
@@ -0,0 +1,99 @@
+/*
+ * SpanDSP - a series of DSP components for telephony
+ *
+ * complex_vector_float_tests.c
+ *
+ * Written by Steve Underwood <steveu(a)coppice.org>
+ *
+ * Copyright (C) 2006,2008 Steve Underwood
+ *
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2, 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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_tests.c,v 1.1 2008/09/18 12:05:35 steveu Exp $
+ */
+
+#if defined(HAVE_CONFIG_H)
+#include "config.h"
+#endif
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <fcntl.h>
+#include <string.h>
+#include <audiofile.h>
+
+#include "spandsp.h"
+
+static complexf_t cvec_dot_prodf_dumb(const complexf_t x[], const complexf_t y[], int n)
+{
+ int i;
+ complexf_t z;
+ complexf_t z1;
+
+ z = complex_setf(0.0f, 0.0f);
+ for (i = 0; i < n; i++)
+ {
+ z1 = complex_mulf(&x[i], &y[i]);
+ z = complex_addf(&z, &z1);
+ }
+ return z;
+}
+/*- End of function --------------------------------------------------------*/
+
+static int test_cvec_dot_prodf(void)
+{
+ int i;
+ complexf_t x[100];
+ complexf_t y[100];
+ complexf_t zsa;
+ complexf_t zsb;
+ complexf_t ratio;
+
+ for (i = 0; i < 99; i++)
+ {
+ x[i].re = rand();
+ x[i].im = rand();
+ y[i].re = rand();
+ y[i].im = rand();
+ }
+ for (i = 1; i < 99; i++)
+ {
+ zsa = cvec_dot_prodf(x, y, i);
+ zsb = cvec_dot_prodf_dumb(x, y, i);
+ ratio.re = zsa.re/zsb.re;
+ ratio.im = zsa.im/zsb.im;
+ if ((ratio.re < 0.9999 || ratio.re > 1.0001)
+ ||
+ (ratio.im < 0.9999 || ratio.im > 1.0001))
+ {
+ printf("vec_dot_prod() - (%f,%f) (%f,%f)\n", zsa.re, zsa.im, zsb.re, zsb.im);
+ printf("Tests failed\n");
+ exit(2);
+ }
+ }
+ return 0;
+}
+/*- End of function --------------------------------------------------------*/
+
+int main(int argc, char *argv[])
+{
+ test_cvec_dot_prodf();
+
+ printf("Tests passed.\n");
+ return 0;
+}
+/*- End of function --------------------------------------------------------*/
+/*- End of file ------------------------------------------------------------*/
Added: freeswitch/trunk/libs/spandsp/tests/complex_vector_int_tests.c
==============================================================================
--- (empty file)
+++ freeswitch/trunk/libs/spandsp/tests/complex_vector_int_tests.c Wed Oct 1 00:06:53 2008
@@ -0,0 +1,137 @@
+/*
+ * SpanDSP - a series of DSP components for telephony
+ *
+ * complex_vector_int_tests.c
+ *
+ * Written by Steve Underwood <steveu(a)coppice.org>
+ *
+ * Copyright (C) 2006 Steve Underwood
+ *
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2, 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 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_tests.c,v 1.1 2008/09/18 12:05:35 steveu Exp $
+ */
+
+#if defined(HAVE_CONFIG_H)
+#include "config.h"
+#endif
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <fcntl.h>
+#include <string.h>
+#include <audiofile.h>
+
+#include "spandsp.h"
+
+static complexi32_t cvec_dot_prodi16_dumb(const complexi16_t x[], const complexi16_t y[], int n)
+{
+ complexi32_t z;
+ int i;
+
+ z = complex_seti32(0, 0);
+ for (i = 0; i < n; i++)
+ {
+ z.re += ((int32_t) x[i].re*(int32_t) y[i].re - (int32_t) x[i].im*(int32_t) y[i].im);
+ z.im += ((int32_t) x[i].re*(int32_t) y[i].im + (int32_t) x[i].im*(int32_t) y[i].re);
+ }
+ return z;
+}
+/*- End of function --------------------------------------------------------*/
+
+static int test_cvec_dot_prodi16(void)
+{
+ int i;
+ complexi32_t za;
+ complexi32_t zb;
+ complexi16_t x[99];
+ complexi16_t y[99];
+
+ for (i = 0; i < 99; i++)
+ {
+ x[i].re = rand();
+ x[i].im = rand();
+ y[i].re = rand();
+ y[i].im = rand();
+ }
+
+ for (i = 1; i < 99; i++)
+ {
+ za = cvec_dot_prodi16(x, y, i);
+ zb = cvec_dot_prodi16_dumb(x, y, i);
+ if (za.re != zb.re || za.im != zb.im)
+ {
+ printf("Tests failed\n");
+ exit(2);
+ }
+ }
+ return 0;
+}
+/*- End of function --------------------------------------------------------*/
+
+static int test_cvec_circular_dot_prodi16(void)
+{
+ int i;
+ int j;
+ int pos;
+ int len;
+ complexi32_t za;
+ complexi32_t zb;
+ complexi16_t x[99];
+ complexi16_t y[99];
+
+ /* Verify that we can do circular sample buffer "dot" linear coefficient buffer
+ operations properly, by doing two sub-dot products. */
+ for (i = 0; i < 99; i++)
+ {
+ x[i].re = rand();
+ x[i].im = rand();
+ y[i].re = rand();
+ y[i].im = rand();
+ }
+
+ len = 95;
+ for (pos = 0; pos < len; pos++)
+ {
+ za = cvec_circular_dot_prodi16(x, y, len, pos);
+ zb = complex_seti32(0, 0);
+ for (i = 0; i < len; i++)
+ {
+ j = (pos + i) % len;
+ zb.re += ((int32_t) x[j].re*(int32_t) y[i].re - (int32_t) x[j].im*(int32_t) y[i].im);
+ zb.im += ((int32_t) x[j].re*(int32_t) y[i].im + (int32_t) x[j].im*(int32_t) y[i].re);
+ }
+
+ if (za.re != zb.re || za.im != zb.im)
+ {
+ printf("Tests failed\n");
+ exit(2);
+ }
+ }
+ return 0;
+}
+/*- End of function --------------------------------------------------------*/
+
+int main(int argc, char *argv[])
+{
+ test_cvec_dot_prodi16();
+ test_cvec_circular_dot_prodi16();
+
+ printf("Tests passed.\n");
+ return 0;
+}
+/*- End of function --------------------------------------------------------*/
+/*- End of file ------------------------------------------------------------*/
1
0