skypiax: more timin fixes, works well on linux, with skype beta 2, 100HZ, and switch_ivr.c line 157 set to ms>1. Let's see on windoz

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@16661 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
Giovanni Maruzzelli 2010-02-16 20:21:57 +00:00
parent cd1c97b23f
commit da4dd92f2a
2 changed files with 38 additions and 20 deletions

View File

@ -845,14 +845,18 @@ static switch_status_t channel_receive_message(switch_core_session_t *session, s
switch_core_timer_sync(&tech_pvt->timer_write); switch_core_timer_sync(&tech_pvt->timer_write);
#endif // TIMER_WRITE #endif // TIMER_WRITE
break; break;
default: case SWITCH_MESSAGE_INDICATE_BRIDGE:
{
DEBUGA_SKYPE("%s CHANNEL got SWITCH_MESSAGE_INDICATE_BRIDGE\n", SKYPIAX_P_LOG, switch_channel_get_name(channel));
switch_core_timer_sync(&tech_pvt->timer_read); switch_core_timer_sync(&tech_pvt->timer_read);
#ifdef TIMER_WRITE #ifdef TIMER_WRITE
switch_core_timer_sync(&tech_pvt->timer_write); switch_core_timer_sync(&tech_pvt->timer_write);
#endif // TIMER_WRITE #endif // TIMER_WRITE
break;
default:
{
DEBUGA_SKYPE("MSG_ID=%d\n", SKYPIAX_P_LOG, msg->message_id); DEBUGA_SKYPE("MSG_ID=%d\n", SKYPIAX_P_LOG, msg->message_id);
} }
@ -987,7 +991,8 @@ static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *sessi
switch_mutex_unlock(globals.mutex); switch_mutex_unlock(globals.mutex);
return SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER; return SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER;
} }
switch_channel_set_variable(channel, "send_silence_when_idle", "true"); switch_channel_set_variable(channel, "send_silence_when_idle", "1500");
switch_channel_set_variable(channel, "waste", "false");
if (skypiax_tech_init(tech_pvt, *new_session) != SWITCH_STATUS_SUCCESS) { if (skypiax_tech_init(tech_pvt, *new_session) != SWITCH_STATUS_SUCCESS) {
ERRORA("Doh! no tech_init?\n", SKYPIAX_P_LOG); ERRORA("Doh! no tech_init?\n", SKYPIAX_P_LOG);
switch_core_session_destroy(new_session); switch_core_session_destroy(new_session);
@ -1809,7 +1814,8 @@ int new_inbound_channel(private_t * tech_pvt)
switch_core_session_destroy(&session); switch_core_session_destroy(&session);
return 0; return 0;
} }
switch_channel_set_variable(channel, "send_silence_when_idle", "true"); switch_channel_set_variable(channel, "send_silence_when_idle", "1500");
switch_channel_set_variable(channel, "waste", "false");
if (skypiax_tech_init(tech_pvt, session) != SWITCH_STATUS_SUCCESS) { if (skypiax_tech_init(tech_pvt, session) != SWITCH_STATUS_SUCCESS) {
ERRORA("Doh! no tech_init?\n", SKYPIAX_P_LOG); ERRORA("Doh! no tech_init?\n", SKYPIAX_P_LOG);
switch_core_session_destroy(&session); switch_core_session_destroy(&session);

View File

@ -828,7 +828,7 @@ void *skypiax_do_tcp_srv_thread_func(void *obj)
if (len == 320) { if (len == 320) {
unsigned int howmany; unsigned int howmany;
//DEBUGA_SKYPE("320!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n", SKYPIAX_P_LOG); NOTICA("320!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n", SKYPIAX_P_LOG);
if (samplerate_skypiax == 8000) { if (samplerate_skypiax == 8000) {
/* we're downsampling from 16khz to 8khz, srv_out will contain each other sample from srv_in */ /* we're downsampling from 16khz to 8khz, srv_out will contain each other sample from srv_in */
a = 0; a = 0;
@ -889,10 +889,20 @@ void *skypiax_do_tcp_srv_thread_func(void *obj)
} }
} else if (len == 640) { } else if (len == 640) {
int waitin;
int max_waitin=20;
if (tech_pvt->flag_audio_srv == 1) { waitin=0;
while (tech_pvt->flag_audio_srv == 1) {
switch_sleep(1000); //1 millisec switch_sleep(1000); //1 millisec
waitin++;
if(waitin == max_waitin){
break;
} }
}
if(waitin > 1)
ERRORA("waitin is %d\n", SKYPIAX_P_LOG, waitin);
switch_mutex_lock(tech_pvt->mutex_audio_srv); switch_mutex_lock(tech_pvt->mutex_audio_srv);
memcpy(tech_pvt->audiobuf_srv, srv_in, SAMPLES_PER_FRAME * sizeof(short)); memcpy(tech_pvt->audiobuf_srv, srv_in, SAMPLES_PER_FRAME * sizeof(short));
tech_pvt->flag_audio_srv = 1; tech_pvt->flag_audio_srv = 1;
@ -1036,8 +1046,10 @@ void *skypiax_do_tcp_cli_thread_func(void *obj)
fd_set fs; fd_set fs;
struct timeval to; struct timeval to;
int waitin; int waitin;
//int big_waitin=40; #if 1
//int lil_waitin=20; int big_waitin=40;
int lil_waitin=20;
#endif//0
int big_waited; int big_waited;
if (!(running && tech_pvt->running)) if (!(running && tech_pvt->running))
@ -1071,7 +1083,7 @@ void *skypiax_do_tcp_cli_thread_func(void *obj)
skypiax_sleep(1000); //1 millisec skypiax_sleep(1000); //1 millisec
#endif //WIN32 #endif //WIN32
waitin++; waitin++;
#if 0 #if 1
if(big_waited == 1 && waitin==lil_waitin && tech_pvt->flag_audio_cli == 0){ if(big_waited == 1 && waitin==lil_waitin && tech_pvt->flag_audio_cli == 0){
memset(cli_out, 255, SAMPLES_PER_FRAME * sizeof(short)); memset(cli_out, 255, SAMPLES_PER_FRAME * sizeof(short));
send(fd, (char *) cli_out, SAMPLES_PER_FRAME * sizeof(short), 0); send(fd, (char *) cli_out, SAMPLES_PER_FRAME * sizeof(short), 0);
@ -1091,7 +1103,7 @@ void *skypiax_do_tcp_cli_thread_func(void *obj)
#endif //0 #endif //0
} }
if(waitin > 21){ if(waitin > 21){
//NOTICA("waitin is now %d\n", SKYPIAX_P_LOG, waitin); NOTICA("waitin is now %d\n", SKYPIAX_P_LOG, waitin);
} }
rt = 1; rt = 1;
@ -1205,7 +1217,7 @@ int skypiax_audio_read(private_t * tech_pvt)
//WARNINGA("read now is 0\n", SKYPIAX_P_LOG); //WARNINGA("read now is 0\n", SKYPIAX_P_LOG);
} }
if(waitin > 21){ if(waitin > 21){
//DEBUGA_SKYPE("read is now %d\n", SKYPIAX_P_LOG, waitin); ERRORA("read is now %d\n", SKYPIAX_P_LOG, waitin);
} }
//samples = skypiax_pipe_read(tech_pvt->audiopipe_srv[0], tech_pvt->read_frame.data, SAMPLES_PER_FRAME * sizeof(short)); //samples = skypiax_pipe_read(tech_pvt->audiopipe_srv[0], tech_pvt->read_frame.data, SAMPLES_PER_FRAME * sizeof(short));
switch_mutex_lock(tech_pvt->mutex_audio_srv); switch_mutex_lock(tech_pvt->mutex_audio_srv);