Author: gmaruzz Date: Wed Dec 17 13:37:17 2008 New Revision: 10855 Log: send audio to remote skype client at native rate on linux Modified: freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/mod_skypiax.c freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/skypiax.h freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/skypiax_protocol.c Modified: freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/mod_skypiax.c ============================================================================== --- freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/mod_skypiax.c (original) +++ freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/mod_skypiax.c Wed Dec 17 13:37:17 2008 @@ -392,7 +392,7 @@ sent = frame->datalen; switch_file_write(p->audioskypepipe[1], (short *) frame->data, &sent); - //ERRORA("sent %d\n", SKYPIAX_P_LOG, sent); + DEBUGA_SKYPE("CLI PIPE write %d\n", SKYPIAX_P_LOG, sent); return SWITCH_STATUS_SUCCESS; Modified: freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/skypiax.h ============================================================================== --- freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/skypiax.h (original) +++ freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/skypiax.h Wed Dec 17 13:37:17 2008 @@ -45,8 +45,8 @@ //FIXME include? #endif //WIN32 -#define SAMPLES_PER_FRAME 160 -#define SAMPLERATE 8000 +#define SAMPLES_PER_FRAME 320 +#define SAMPLERATE 16000 //#define SKYPIAX_SVN_VERSION "SVN 123456" #define SKYPIAX_SVN_VERSION SWITCH_VERSION_REVISION Modified: freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/skypiax_protocol.c ============================================================================== --- freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/skypiax_protocol.c (original) +++ freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/skypiax_protocol.c Wed Dec 17 13:37:17 2008 @@ -216,7 +216,7 @@ unsigned int len; unsigned int i; unsigned int a; - short cli_in[SAMPLES_PER_FRAME / 2]; + short cli_in[SAMPLES_PER_FRAME]; short cli_out[SAMPLES_PER_FRAME]; int sin_size; unsigned int fd; @@ -224,7 +224,7 @@ int len; int i; int a; - short cli_in[SAMPLES_PER_FRAME / 2]; + short cli_in[SAMPLES_PER_FRAME]; short cli_out[SAMPLES_PER_FRAME]; unsigned int sin_size; int fd; @@ -287,33 +287,59 @@ to.tv_usec = 10000; to.tv_sec = 0; //rt = select(fdselect + 1, &fs, NULL, NULL, &to); - switch_sleep(5000); + //switch_sleep(5000); rt = 1; - if (rt > 0) { + if (rt > 0) { + /*********************************************/ + if (SAMPLERATE == 8000) { + got = (SAMPLES_PER_FRAME / 2) * sizeof(short); + switch_file_read(p->audioskypepipe[0], cli_in, &got); + + if (got > 0) { + a = 0; + for (i = 0; i < got / sizeof(short); i++) { + cli_out[a] = cli_in[i]; + a++; + cli_out[a] = cli_in[i]; + a++; + } + + len = send(fd, cli_out, got * 2, 0); + + if (len == 0) { + ERRORA("Skype server GONE\n", SKYPIAX_P_LOG); + break; + } + } else { + switch_sleep(1000); + //ERRORA("Audio skype pipe give us: %u\n", SKYPIAX_P_LOG, got); + } + } + /*********************************************/ + /*********************************************/ + else if (SAMPLERATE == 16000) { + got = SAMPLES_PER_FRAME * sizeof(short); + switch_file_read(p->audioskypepipe[0], cli_in, &got); + + if (got > 0) { + DEBUGA_SKYPE("CLI PIPE read %d\n", SKYPIAX_P_LOG, got); + + len = send(fd, cli_in, got, 0); + + DEBUGA_SKYPE("CLI PIPE send %d\n", SKYPIAX_P_LOG, len); + + if (len == 0) { + ERRORA("Skype server GONE\n", SKYPIAX_P_LOG); + break; + } + } else { + switch_sleep(1000); + ERRORA("CLI PIPE give us: %u\n", SKYPIAX_P_LOG, got); + } + } + /*********************************************/ - got = (SAMPLES_PER_FRAME / 2) * sizeof(short); - switch_file_read(p->audioskypepipe[0], cli_in, &got); - - if (got > 0) { - a = 0; - for (i = 0; i < got / sizeof(short); i++) { - cli_out[a] = cli_in[i]; - a++; - cli_out[a] = cli_in[i]; - a++; - } - - len = send(fd, cli_out, got * 2, 0); - - if (len == 0) { - ERRORA("Skype server GONE\n", SKYPIAX_P_LOG); - break; - } - } else { - switch_sleep(1000); - //ERRORA("Audio skype pipe give us: %u\n", SKYPIAX_P_LOG, got); - } - } + } } ERRORA("Skype server GONE\n", SKYPIAX_P_LOG); @@ -351,7 +377,7 @@ rv = switch_file_pipe_create(&p->audioskypepipe[0], &p->audioskypepipe[1], skypiax_module_pool); - rv = switch_file_pipe_timeout_set(p->audioskypepipe[0], 100); + rv = switch_file_pipe_timeout_set(p->audioskypepipe[0], 100000); if (option_debug > 10) { DEBUGA_PBX("EXITING FUNC\n", SKYPIAX_P_LOG); }