mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-02-08 08:51:50 +00:00
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:
parent
3f763b939a
commit
bf93192877
@ -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);
|
printk("giova: timer_func %d %d NULL: continue\n", __LINE__, i);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (in_irq())
|
//if (in_irq())
|
||||||
printk("giova: timer_func %d %d we are in HARDWARE IRQ\n", __LINE__, i);
|
//printk("giova: timer_func %d %d we are in HARDWARE IRQ\n", __LINE__, i);
|
||||||
//if(in_softirq())
|
//if(in_softirq())
|
||||||
//printk("giova: timer_func %d %d we are in SOFT IRQ\n", __LINE__, i);
|
//printk("giova: timer_func %d %d we are in SOFT IRQ\n", __LINE__, i);
|
||||||
//printk("giova: timer_func %d %d\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;
|
struct snd_dummy_pcm *dpcm = runtime->private_data;
|
||||||
|
|
||||||
//printk("giova: pointer %d %p\n", __LINE__, dpcm);
|
//printk("giova: pointer %d %p\n", __LINE__, dpcm);
|
||||||
//return bytes_to_frames(runtime, dpcm->pcm_buf_pos / dpcm->pcm_hz);
|
return bytes_to_frames(runtime, dpcm->pcm_buf_pos / dpcm->pcm_hz);
|
||||||
return (dpcm->pcm_buf_pos / dpcm->pcm_hz) / 2;
|
//return (dpcm->pcm_buf_pos / dpcm->pcm_hz) / 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct snd_pcm_hardware snd_card_dummy_playback = {
|
static struct snd_pcm_hardware snd_card_dummy_playback = {
|
||||||
|
39
src/mod/endpoints/mod_skypiax/configs/copy
Normal file
39
src/mod/endpoints/mod_skypiax/configs/copy
Normal 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/
|
40
src/mod/endpoints/mod_skypiax/configs/create
Normal file
40
src/mod/endpoints/mod_skypiax/configs/create
Normal 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
|
@ -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);
|
DEBUGA_SKYPE("CHANNEL READ CONTINUE\n", SKYPIAX_P_LOG);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
switch_core_timer_check(&tech_pvt->timer_read, SWITCH_TRUE);
|
|
||||||
*frame = &tech_pvt->read_frame;
|
*frame = &tech_pvt->read_frame;
|
||||||
#if SWITCH_BYTE_ORDER == __BIG_ENDIAN
|
#if SWITCH_BYTE_ORDER == __BIG_ENDIAN
|
||||||
if (switch_test_flag(tech_pvt, TFLAG_LINEAR)) {
|
if (switch_test_flag(tech_pvt, TFLAG_LINEAR)) {
|
||||||
@ -1393,6 +1392,7 @@ static switch_status_t load_config(int reload_type)
|
|||||||
switch_sleep(100000);
|
switch_sleep(100000);
|
||||||
|
|
||||||
skypiax_audio_init(&globals.SKYPIAX_INTERFACES[interface_id]);
|
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
|
NOTICA
|
||||||
("WAITING roughly 10 seconds to find a running Skype client and connect to its SKYPE API for interface_id=%d\n",
|
("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 (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) };
|
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));
|
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_channel_queue_dtmf(channel, &dtmf);
|
||||||
switch_set_flag(tech_pvt, TFLAG_DTMF);
|
switch_set_flag(tech_pvt, TFLAG_DTMF);
|
||||||
switch_mutex_unlock(tech_pvt->flag_mutex);
|
switch_mutex_unlock(tech_pvt->flag_mutex);
|
||||||
} else {
|
//} else {
|
||||||
NOTICA
|
//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));
|
//("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 {
|
} else {
|
||||||
WARNINGA("received %c DTMF, but no channel?\n", SKYPIAX_P_LOG, value[0]);
|
WARNINGA("received %c DTMF, but no channel?\n", SKYPIAX_P_LOG, value[0]);
|
||||||
}
|
}
|
||||||
|
@ -813,11 +813,14 @@ void *skypiax_do_tcp_srv_thread_func(void *obj)
|
|||||||
to.tv_usec = 60000; //60 msec
|
to.tv_usec = 60000; //60 msec
|
||||||
to.tv_sec = 0;
|
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);
|
rt = select(fdselect + 1, &fs, NULL, NULL, &to);
|
||||||
if (rt > 0) {
|
if (rt > 0) {
|
||||||
|
|
||||||
if (tech_pvt->skype_callflow != CALLFLOW_STATUS_REMOTEHOLD) {
|
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 {
|
} else {
|
||||||
len = 0;
|
len = 0;
|
||||||
}
|
}
|
||||||
@ -825,6 +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);
|
||||||
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;
|
||||||
@ -869,10 +873,12 @@ void *skypiax_do_tcp_srv_thread_func(void *obj)
|
|||||||
if (tech_pvt->flag_audio_srv == 1) {
|
if (tech_pvt->flag_audio_srv == 1) {
|
||||||
switch_sleep(1000); //1 millisec
|
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));
|
memcpy(tech_pvt->audiobuf_srv, totalbuf, SAMPLES_PER_FRAME * sizeof(short));
|
||||||
tech_pvt->flag_audio_srv = 1;
|
tech_pvt->flag_audio_srv = 1;
|
||||||
}
|
switch_mutex_unlock(tech_pvt->mutex_audio_srv);
|
||||||
|
//}
|
||||||
//NOTICA("read \n", SKYPIAX_P_LOG);
|
//NOTICA("read \n", SKYPIAX_P_LOG);
|
||||||
if (howmany != SAMPLES_PER_FRAME * sizeof(short)) {
|
if (howmany != SAMPLES_PER_FRAME * sizeof(short)) {
|
||||||
ERRORA("howmany is %d, but was expected to be %d\n", SKYPIAX_P_LOG,
|
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;
|
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) {
|
} else if (len == 0) {
|
||||||
skypiax_sleep(1000);
|
skypiax_sleep(1000);
|
||||||
} else {
|
} else {
|
||||||
DEBUGA_SKYPE("len=%d, expected 320\n", SKYPIAX_P_LOG, len);
|
ERRORA("len=%d, expected 640\n", SKYPIAX_P_LOG, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@ -1017,6 +1032,10 @@ void *skypiax_do_tcp_cli_thread_func(void *obj)
|
|||||||
int rt;
|
int rt;
|
||||||
fd_set fs;
|
fd_set fs;
|
||||||
struct timeval to;
|
struct timeval to;
|
||||||
|
int waitin;
|
||||||
|
int big_waitin=40;
|
||||||
|
int lil_waitin=20;
|
||||||
|
int big_waited;
|
||||||
|
|
||||||
if (!(running && tech_pvt->running))
|
if (!(running && tech_pvt->running))
|
||||||
break;
|
break;
|
||||||
@ -1040,15 +1059,36 @@ void *skypiax_do_tcp_cli_thread_func(void *obj)
|
|||||||
FD_SET(fdselect, &fs);
|
FD_SET(fdselect, &fs);
|
||||||
|
|
||||||
//FIXME rt = select(fdselect + 1, NULL, &fs, NULL, &to);
|
//FIXME rt = select(fdselect + 1, NULL, &fs, NULL, &to);
|
||||||
|
waitin=0;
|
||||||
|
big_waited=0;
|
||||||
while (tech_pvt->flag_audio_cli == 0) {
|
while (tech_pvt->flag_audio_cli == 0) {
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
skypiax_sleep(100); //0.1 millisec
|
skypiax_sleep(100); //0.1 millisec
|
||||||
#else
|
#else
|
||||||
skypiax_sleep(1000); //1 millisec
|
skypiax_sleep(1000); //1 millisec
|
||||||
#endif //WIN32
|
#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;
|
rt = 1;
|
||||||
|
|
||||||
@ -1149,22 +1189,29 @@ void *skypiax_do_tcp_cli_thread_func(void *obj)
|
|||||||
int skypiax_audio_read(private_t * tech_pvt)
|
int skypiax_audio_read(private_t * tech_pvt)
|
||||||
{
|
{
|
||||||
unsigned int samples;
|
unsigned int samples;
|
||||||
|
int waitin;
|
||||||
|
|
||||||
|
waitin=0;
|
||||||
while (tech_pvt->flag_audio_srv == 0) {
|
while (tech_pvt->flag_audio_srv == 0) {
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
skypiax_sleep(100); //0.1 millisec
|
skypiax_sleep(100); //0.1 millisec
|
||||||
#else
|
#else
|
||||||
skypiax_sleep(1000); //1 millisec
|
skypiax_sleep(1000); //1 millisec
|
||||||
#endif //WIN32
|
#endif //WIN32
|
||||||
|
waitin++;
|
||||||
|
|
||||||
//WARNINGA("read now is 0\n", SKYPIAX_P_LOG);
|
//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 = 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));
|
memcpy(tech_pvt->read_frame.data, tech_pvt->audiobuf_srv, SAMPLES_PER_FRAME * sizeof(short));
|
||||||
tech_pvt->flag_audio_srv = 0;
|
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 != SAMPLES_PER_FRAME * sizeof(short)) {
|
||||||
if (samples)
|
if (samples)
|
||||||
WARNINGA("read samples=%u expected=%u\n", SKYPIAX_P_LOG, samples, (int) (SAMPLES_PER_FRAME * sizeof(short)));
|
WARNINGA("read samples=%u expected=%u\n", SKYPIAX_P_LOG, samples, (int) (SAMPLES_PER_FRAME * sizeof(short)));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user