[Freeswitch-svn] [commit] r11695 - freeswitch/branches/gmaruzz/mod_skypiax
FreeSWITCH SVN
gmaruzz at freeswitch.org
Sun Feb 8 10:51:05 PST 2009
Author: gmaruzz
Date: Sun Feb 8 12:51:05 2009
New Revision: 11695
Log:
skypiax: cleaning skypiax_protocol.c
Modified:
freeswitch/branches/gmaruzz/mod_skypiax/skypiax_protocol.c
Modified: freeswitch/branches/gmaruzz/mod_skypiax/skypiax_protocol.c
==============================================================================
--- freeswitch/branches/gmaruzz/mod_skypiax/skypiax_protocol.c (original)
+++ freeswitch/branches/gmaruzz/mod_skypiax/skypiax_protocol.c Sun Feb 8 12:51:05 2009
@@ -213,7 +213,7 @@
}
} else if (len == 0) {
- DEBUGA_SKYPE("Skype client GONE\n", SKYPIAX_P_LOG);
+ DEBUGA_SKYPE("Skype incoming audio GONE\n", SKYPIAX_P_LOG);
skypiax_sleep(1000);
} else {
ERRORA("len=%d\n", SKYPIAX_P_LOG, len);
@@ -246,7 +246,7 @@
break;
}
- DEBUGA_SKYPE("server (I am it) GONE\n", SKYPIAX_P_LOG);
+ DEBUGA_SKYPE("incoming audio server (I am it) GONE\n", SKYPIAX_P_LOG);
skypiax_close_socket(s);
if (option_debug > 100) {
DEBUGA_PBX("EXITING FUNC\n", SKYPIAX_P_LOG);
@@ -262,22 +262,16 @@
struct sockaddr_in my_addr;
struct sockaddr_in remote_addr;
unsigned int got;
-#ifdef WIN32
unsigned int len;
unsigned int i;
unsigned int a;
- int sin_size;
unsigned int fd;
short cli_out[SAMPLES_PER_FRAME * 2];
short cli_in[SAMPLES_PER_FRAME];
+#ifdef WIN32
+ int sin_size;
#else
- int len;
- int i;
- int a;
unsigned int sin_size;
- int fd;
- short cli_out[SAMPLES_PER_FRAME * 2];
- short cli_in[SAMPLES_PER_FRAME];
#endif /* WIN32 */
if (option_debug > 100) {
@@ -286,7 +280,7 @@
memset(&my_addr, 0, sizeof(my_addr));
my_addr.sin_family = AF_INET;
my_addr.sin_addr.s_addr = htonl(0x7f000001); /* use the localhost */
- my_addr.sin_port = htons(tech_pvt->tcp_cli_port); //FIXME configurable!
+ my_addr.sin_port = htons(tech_pvt->tcp_cli_port);
if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
ERRORA("socket Error\n", SKYPIAX_P_LOG);
@@ -343,11 +337,18 @@
rt = select(fdselect + 1, &fs, NULL, NULL, &to);
#endif /* WIN32 */
if (rt > 0) {
- if ((SAMPLERATE_SKYPIAX - 8000) == 0) {
- got = SAMPLES_PER_FRAME * sizeof(short);
- got = skypiax_pipe_read(tech_pvt->audioskypepipe[0], cli_in, got);
- if (got > 0) {
+ /* read from the pipe the audio frame we are supposed to send out */
+ got = skypiax_pipe_read(tech_pvt->audioskypepipe[0], cli_in, SAMPLES_PER_FRAME * sizeof(short));
+ if (got != SAMPLES_PER_FRAME * sizeof(short)) {
+ ERRORA("got is %d, but was expected to be %d\n", SKYPIAX_P_LOG, got,
+ SAMPLES_PER_FRAME * sizeof(short));
+ }
+
+ if (got == SAMPLES_PER_FRAME * sizeof(short)) {
+ if (SAMPLERATE_SKYPIAX == 8000) {
+
+ /* we're upsampling from 8khz to 16khz, cli_out will contain two times each sample from cli_in */
a = 0;
for (i = 0; i < got / sizeof(short); i++) {
cli_out[a] = cli_in[i];
@@ -355,60 +356,50 @@
cli_out[a] = cli_in[i];
a++;
}
-
-#ifdef WIN32
- len = send(fd, (char *) cli_out, got * 2, 0);
-#else /* WIN32 */
- len = send(fd, cli_out, got * 2, 0);
-#endif /* WIN32 */
- if (len == 0) {
- ERRORA("Skype server GONE\n", SKYPIAX_P_LOG);
- break;
+ got = got * 2;
+ } else if (SAMPLERATE_SKYPIAX == 16000) {
+ /* we're NOT upsampling, cli_out will contain just ALL samples from cli_in */
+ for (i = 0; i < got / sizeof(short); i++) {
+ cli_out[i] = cli_in[i];
}
} else {
- skypiax_sleep(1000);
- ERRORA("CLI PIPE give us: %u\n", SKYPIAX_P_LOG, got);
+ ERRORA("SAMPLERATE_SKYPIAX can only be 8000 or 16000\n", SKYPIAX_P_LOG);
}
- } else if (SAMPLERATE_SKYPIAX == 16000) {
- got = SAMPLES_PER_FRAME * sizeof(short);
- got = skypiax_pipe_read(tech_pvt->audioskypepipe[0], cli_in, got);
-
- if (got > 0) {
- if (got != SAMPLES_PER_FRAME * sizeof(short))
- ERRORA("CLI PIPE read %d\n", SKYPIAX_P_LOG, got);
+ /* send the 16khz frame to the Skype client waiting for incoming audio */
#ifdef WIN32
- len = send(fd, (char *) cli_in, got, 0);
+ len = send(fd, (char *) cli_out, got, 0);
#else /* WIN32 */
- len = send(fd, cli_in, got, 0);
-#endif /* WIN32 */
-
- if (len != got && len != -1)
- DEBUGA_SKYPE("CLI PIPE send %d\n", SKYPIAX_P_LOG, len);
-
- if (len == 0) {
- ERRORA("Skype server GONE\n", SKYPIAX_P_LOG);
+ len = send(fd, cli_out, got, 0);
+#endif /* WIN32 */
+
+ if (len == -1) {
break;
- }
- } else {
- skypiax_sleep(1000);
- ERRORA("CLI PIPE give us: %u\n", SKYPIAX_P_LOG, got);
- }
+ } else if (len != got){
+ ERRORA("len=%d\n", SKYPIAX_P_LOG, len);
+ skypiax_sleep(1000);
+ break;
}
+ } else {
+
+ ERRORA("got is %d, but was expected to be %d\n", SKYPIAX_P_LOG, got, SAMPLES_PER_FRAME * sizeof(short));
+ skypiax_sleep(10000);
+
+ }
} else {
- skypiax_sleep(1000);
if (rt)
- ERRORA("select give us: %u\n", SKYPIAX_P_LOG, rt);
+ ERRORA("CLI rt=%d\n", SKYPIAX_P_LOG, rt);
+ skypiax_sleep(10000);
}
- }
- DEBUGA_SKYPE("Skype server GONE\n", SKYPIAX_P_LOG);
- skypiax_close_socket(s);
+ }
+ DEBUGA_SKYPE("Skype outbound audio GONE\n", SKYPIAX_P_LOG);
+ skypiax_close_socket(fd);
break;
}
- DEBUGA_SKYPE("client (I am it) GONE\n", SKYPIAX_P_LOG);
+ DEBUGA_SKYPE("outbound audio server (I am it) GONE\n", SKYPIAX_P_LOG);
skypiax_close_socket(s);
if (option_debug > 100) {
DEBUGA_PBX("EXITING FUNC\n", SKYPIAX_P_LOG);
@@ -441,9 +432,6 @@
/* the pipe is the audio fd for asterisk to poll on during a call */
tech_pvt->skypiax_sound_capt_fd = tech_pvt->audiopipe[0];
- if (option_debug > 10) {
- DEBUGA_PBX("EXITING FUNC\n", SKYPIAX_P_LOG);
- }
return 0;
}
More information about the Freeswitch-svn
mailing list