skypiax: lot of changes and tweakings about timing

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@16638 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
Giovanni Maruzzelli 2010-02-14 02:36:46 +00:00
parent 3f763b939a
commit bf93192877
5 changed files with 144 additions and 18 deletions

View File

@ -336,8 +336,8 @@ static void snd_card_dummy_pcm_timer_function(unsigned long data)
printk("giova: timer_func %d %d NULL: continue\n", __LINE__, i);
continue;
}
if (in_irq())
printk("giova: timer_func %d %d we are in HARDWARE IRQ\n", __LINE__, i);
//if (in_irq())
//printk("giova: timer_func %d %d we are in HARDWARE IRQ\n", __LINE__, i);
//if(in_softirq())
//printk("giova: timer_func %d %d we are in SOFT IRQ\n", __LINE__, i);
//printk("giova: timer_func %d %d\n", __LINE__, i);
@ -364,8 +364,8 @@ static snd_pcm_uframes_t snd_card_dummy_pcm_pointer(struct snd_pcm_substream *su
struct snd_dummy_pcm *dpcm = runtime->private_data;
//printk("giova: pointer %d %p\n", __LINE__, dpcm);
//return bytes_to_frames(runtime, dpcm->pcm_buf_pos / dpcm->pcm_hz);
return (dpcm->pcm_buf_pos / dpcm->pcm_hz) / 2;
return bytes_to_frames(runtime, dpcm->pcm_buf_pos / dpcm->pcm_hz);
//return (dpcm->pcm_buf_pos / dpcm->pcm_hz) / 2;
}
static struct snd_pcm_hardware snd_card_dummy_playback = {

View File

@ -0,0 +1,39 @@
cp -a skypiax101/* skypiax102/
cp -a skypiax101/* skypiax103/
cp -a skypiax101/* skypiax104/
cp -a skypiax101/* skypiax105/
cp -a skypiax101/* skypiax106/
cp -a skypiax101/* skypiax107/
cp -a skypiax101/* skypiax108/
cp -a skypiax101/* skypiax109/
cp -a skypiax101/* skypiax110/
cp -a skypiax101/* skypiax111/
cp -a skypiax101/* skypiax112/
cp -a skypiax101/* skypiax113/
cp -a skypiax101/* skypiax114/
cp -a skypiax101/* skypiax115/
cp -a skypiax101/* skypiax116/
cp -a skypiax101/* skypiax117/
cp -a skypiax101/* skypiax118/
cp -a skypiax101/* skypiax119/
cp -a skypiax101/* skypiax120/
cp -a skypiax101/* skypiax121/
cp -a skypiax101/* skypiax122/
cp -a skypiax101/* skypiax123/
cp -a skypiax101/* skypiax124/
cp -a skypiax101/* skypiax125/
cp -a skypiax101/* skypiax126/
cp -a skypiax101/* skypiax127/
cp -a skypiax101/* skypiax128/
cp -a skypiax101/* skypiax129/
cp -a skypiax101/* skypiax130/
cp -a skypiax101/* skypiax131/
cp -a skypiax101/* skypiax132/
cp -a skypiax101/* skypiax133/
cp -a skypiax101/* skypiax134/
cp -a skypiax101/* skypiax135/
cp -a skypiax101/* skypiax136/
cp -a skypiax101/* skypiax137/
cp -a skypiax101/* skypiax138/
cp -a skypiax101/* skypiax139/
cp -a skypiax101/* skypiax140/

View File

@ -0,0 +1,40 @@
mkdir skypiax101
mkdir skypiax102
mkdir skypiax103
mkdir skypiax104
mkdir skypiax105
mkdir skypiax106
mkdir skypiax107
mkdir skypiax108
mkdir skypiax109
mkdir skypiax110
mkdir skypiax111
mkdir skypiax112
mkdir skypiax113
mkdir skypiax114
mkdir skypiax115
mkdir skypiax116
mkdir skypiax117
mkdir skypiax118
mkdir skypiax119
mkdir skypiax120
mkdir skypiax121
mkdir skypiax122
mkdir skypiax123
mkdir skypiax124
mkdir skypiax125
mkdir skypiax126
mkdir skypiax127
mkdir skypiax128
mkdir skypiax129
mkdir skypiax130
mkdir skypiax131
mkdir skypiax132
mkdir skypiax133
mkdir skypiax134
mkdir skypiax135
mkdir skypiax136
mkdir skypiax137
mkdir skypiax138
mkdir skypiax139
mkdir skypiax140

View File

@ -719,7 +719,6 @@ static switch_status_t channel_read_frame(switch_core_session_t *session, switch
DEBUGA_SKYPE("CHANNEL READ CONTINUE\n", SKYPIAX_P_LOG);
continue;
}
switch_core_timer_check(&tech_pvt->timer_read, SWITCH_TRUE);
*frame = &tech_pvt->read_frame;
#if SWITCH_BYTE_ORDER == __BIG_ENDIAN
if (switch_test_flag(tech_pvt, TFLAG_LINEAR)) {
@ -1393,6 +1392,7 @@ static switch_status_t load_config(int reload_type)
switch_sleep(100000);
skypiax_audio_init(&globals.SKYPIAX_INTERFACES[interface_id]);
switch_mutex_init(&globals.SKYPIAX_INTERFACES[interface_id].mutex_audio_srv, SWITCH_MUTEX_NESTED, skypiax_module_pool);
NOTICA
("WAITING roughly 10 seconds to find a running Skype client and connect to its SKYPE API for interface_id=%d\n",
@ -1740,7 +1740,7 @@ int dtmf_received(private_t * tech_pvt, char *value)
if (channel) {
if (!switch_channel_test_flag(channel, CF_BRIDGED)) {
//if (!switch_channel_test_flag(channel, CF_BRIDGED)) {
switch_dtmf_t dtmf = { (char) value[0], switch_core_default_dtmf_duration(0) };
DEBUGA_SKYPE("received DTMF %c on channel %s\n", SKYPIAX_P_LOG, dtmf.digit, switch_channel_get_name(channel));
@ -1749,10 +1749,10 @@ int dtmf_received(private_t * tech_pvt, char *value)
switch_channel_queue_dtmf(channel, &dtmf);
switch_set_flag(tech_pvt, TFLAG_DTMF);
switch_mutex_unlock(tech_pvt->flag_mutex);
} else {
NOTICA
("received a DTMF on channel %s, but we're BRIDGED, so let's NOT relay it out of band\n", SKYPIAX_P_LOG, switch_channel_get_name(channel));
}
//} else {
//NOTICA
//("received a DTMF on channel %s, but we're BRIDGED, so let's NOT relay it out of band\n", SKYPIAX_P_LOG, switch_channel_get_name(channel));
//}
} else {
WARNINGA("received %c DTMF, but no channel?\n", SKYPIAX_P_LOG, value[0]);
}

View File

@ -813,11 +813,14 @@ void *skypiax_do_tcp_srv_thread_func(void *obj)
to.tv_usec = 60000; //60 msec
to.tv_sec = 0;
if (tech_pvt->timer_read.timer_interface && tech_pvt->timer_read.timer_interface->timer_next) {
switch_core_timer_next(&tech_pvt->timer_read);
}
rt = select(fdselect + 1, &fs, NULL, NULL, &to);
if (rt > 0) {
if (tech_pvt->skype_callflow != CALLFLOW_STATUS_REMOTEHOLD) {
len = recv(fd, (char *) srv_in, 320, 0); //seems that Skype only sends 320 bytes at time
len = recv(fd, (char *) srv_in, 640, 0); //seems that Skype only sends 320 bytes at time
} else {
len = 0;
}
@ -825,6 +828,7 @@ void *skypiax_do_tcp_srv_thread_func(void *obj)
if (len == 320) {
unsigned int howmany;
//DEBUGA_SKYPE("320!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n", SKYPIAX_P_LOG);
if (samplerate_skypiax == 8000) {
/* we're downsampling from 16khz to 8khz, srv_out will contain each other sample from srv_in */
a = 0;
@ -869,10 +873,12 @@ void *skypiax_do_tcp_srv_thread_func(void *obj)
if (tech_pvt->flag_audio_srv == 1) {
switch_sleep(1000); //1 millisec
}
if (tech_pvt->flag_audio_srv == 0) {
//if (tech_pvt->flag_audio_srv == 0) {
switch_mutex_lock(tech_pvt->mutex_audio_srv);
memcpy(tech_pvt->audiobuf_srv, totalbuf, SAMPLES_PER_FRAME * sizeof(short));
tech_pvt->flag_audio_srv = 1;
}
switch_mutex_unlock(tech_pvt->mutex_audio_srv);
//}
//NOTICA("read \n", SKYPIAX_P_LOG);
if (howmany != SAMPLES_PER_FRAME * sizeof(short)) {
ERRORA("howmany is %d, but was expected to be %d\n", SKYPIAX_P_LOG,
@ -882,10 +888,19 @@ void *skypiax_do_tcp_srv_thread_func(void *obj)
tech_pvt->audiobuf_is_loaded = 0;
}
} else if (len == 640) {
if (tech_pvt->flag_audio_srv == 1) {
switch_sleep(1000); //1 millisec
}
switch_mutex_lock(tech_pvt->mutex_audio_srv);
memcpy(tech_pvt->audiobuf_srv, srv_in, SAMPLES_PER_FRAME * sizeof(short));
tech_pvt->flag_audio_srv = 1;
switch_mutex_unlock(tech_pvt->mutex_audio_srv);
} else if (len == 0) {
skypiax_sleep(1000);
} else {
DEBUGA_SKYPE("len=%d, expected 320\n", SKYPIAX_P_LOG, len);
ERRORA("len=%d, expected 640\n", SKYPIAX_P_LOG, len);
}
} else {
@ -1017,6 +1032,10 @@ void *skypiax_do_tcp_cli_thread_func(void *obj)
int rt;
fd_set fs;
struct timeval to;
int waitin;
int big_waitin=40;
int lil_waitin=20;
int big_waited;
if (!(running && tech_pvt->running))
break;
@ -1040,15 +1059,36 @@ void *skypiax_do_tcp_cli_thread_func(void *obj)
FD_SET(fdselect, &fs);
//FIXME rt = select(fdselect + 1, NULL, &fs, NULL, &to);
waitin=0;
big_waited=0;
while (tech_pvt->flag_audio_cli == 0) {
#ifdef WIN32
skypiax_sleep(100); //0.1 millisec
#else
skypiax_sleep(1000); //1 millisec
#endif //WIN32
//WARNINGA("write now is 0\n", SKYPIAX_P_LOG);
waitin++;
if(big_waited == 1 && waitin==lil_waitin && tech_pvt->flag_audio_cli == 0){
memset(cli_out, 255, SAMPLES_PER_FRAME * sizeof(short));
send(fd, (char *) cli_out, SAMPLES_PER_FRAME * sizeof(short), 0);
//WARNINGA("write buffer filled at %d\n", SKYPIAX_P_LOG, waitin);
waitin=0;
continue;
}
if(big_waited == 0 && waitin==big_waitin && tech_pvt->flag_audio_cli == 0){
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);
//DEBUGA_SKYPE("write buffer filled at %d\n", SKYPIAX_P_LOG, waitin);
waitin=0;
big_waited=1;
continue;
}
}
if(waitin > 21){
//DEBUGA_SKYPE("waitin is now %d\n", SKYPIAX_P_LOG, waitin);
}
//ERRORA("write is now 1\n", SKYPIAX_P_LOG);
rt = 1;
@ -1149,22 +1189,29 @@ void *skypiax_do_tcp_cli_thread_func(void *obj)
int skypiax_audio_read(private_t * tech_pvt)
{
unsigned int samples;
int waitin;
waitin=0;
while (tech_pvt->flag_audio_srv == 0) {
#ifdef WIN32
skypiax_sleep(100); //0.1 millisec
#else
skypiax_sleep(1000); //1 millisec
#endif //WIN32
waitin++;
//WARNINGA("read now is 0\n", SKYPIAX_P_LOG);
}
//ERRORA("read is now 1\n", SKYPIAX_P_LOG);
if(waitin > 21){
//DEBUGA_SKYPE("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 = SAMPLES_PER_FRAME * sizeof(short);
switch_mutex_lock(tech_pvt->mutex_audio_srv);
memcpy(tech_pvt->read_frame.data, tech_pvt->audiobuf_srv, SAMPLES_PER_FRAME * sizeof(short));
tech_pvt->flag_audio_srv = 0;
switch_mutex_unlock(tech_pvt->mutex_audio_srv);
samples = SAMPLES_PER_FRAME * sizeof(short);
if (samples != SAMPLES_PER_FRAME * sizeof(short)) {
if (samples)
WARNINGA("read samples=%u expected=%u\n", SKYPIAX_P_LOG, samples, (int) (SAMPLES_PER_FRAME * sizeof(short)));