[Freeswitch-branches] [commit] r10867 - freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax
Author: gmaruzz Date: Thu Dec 18 10:00:03 2008 New Revision: 10867 Log: skypiax: seems to read/write audio native on windows, but there are still problems... Modified: freeswitch/branches/gmaruzz/src/mod/endpoints/mod_skypiax/mod_skypiax.c 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 Thu Dec 18 10:00:03 2008 @@ -392,7 +392,7 @@ sent = frame->datalen; switch_file_write(p->audioskypepipe[1], (short *) frame->data, &sent); - DEBUGA_SKYPE("CLI PIPE write %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_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 Thu Dec 18 10:00:03 2008 @@ -63,7 +63,7 @@ struct sockaddr_in remote_addr; int exit = 0; unsigned int kill_cli_size; - short kill_cli_buff[SAMPLES_PER_FRAME * sizeof(short)]; + short kill_cli_buff[SAMPLES_PER_FRAME]; if (option_debug > 10) { WARNINGA("ENTERING FUNC\n", SKYPIAX_P_LOG); @@ -117,57 +117,119 @@ fdselect = fd; FD_ZERO(&fs); FD_SET(fdselect, &fs); - to.tv_usec = 10000; + to.tv_usec = 100000; to.tv_sec = 0; rt = select(fdselect + 1, &fs, NULL, NULL, &to); - //usleep(1000); //rt=1; if (rt > 0) { - len = recv(fd, srv_in, sizeof(short) * SAMPLES_PER_FRAME, 0); - //DEBUGA_SKYPE("recv %d\n", SKYPIAX_P_LOG, len); - if (len > 0) { - a = 0; - for (i = 0; i < len / sizeof(short); i++) { - srv_out[a] = srv_in[i]; - i++; - a++; - } + len = recv(fd, srv_in, sizeof(short) * SAMPLES_PER_FRAME, 0); + //DEBUGA_SKYPE("recv %d\n", SKYPIAX_P_LOG, len); - if (!p->audiobuf_is_loaded) { - for (i = 0; i < (len / sizeof(short)) / 2; i++) { - p->audiobuf[i] = srv_out[i]; - } - p->audiobuf_is_loaded = 1; - } else { - unsigned int howmany; - short totalbuf[SAMPLES_PER_FRAME]; + if(SAMPLERATE == 8000) { - howmany = len / 2 / 2; - for (i = 0; i < howmany; i++) - totalbuf[i] = p->audiobuf[i]; - - howmany = len / 2 / 2; - for (a = 0; a < howmany; a++) { - totalbuf[i] = srv_out[a]; - i++; - } + /****************************************************************/ + if (len > 0) { + a = 0; + for (i = 0; i < len / sizeof(short); i++) { + srv_out[a] = srv_in[i]; + i++; + a++; + } + + if (!p->audiobuf_is_loaded) { + for (i = 0; i < (len / sizeof(short)) / 2; i++) { + p->audiobuf[i] = srv_out[i]; + } + p->audiobuf_is_loaded = 1; + } else { + unsigned int howmany; + short totalbuf[SAMPLES_PER_FRAME]; + + howmany = len / 2 / 2; + for (i = 0; i < howmany; i++) + totalbuf[i] = p->audiobuf[i]; + + howmany = len / 2 / 2; + for (a = 0; a < howmany; a++) { + totalbuf[i] = srv_out[a]; + i++; + } + + howmany = len; + + switch_file_write(p->audiopipe[1], totalbuf, &howmany); + p->audiobuf_is_loaded = 0; + //DEBUGA_SKYPE("read=====> req=%d recv=%d to sent=%d sent=%d\n", SKYPIAX_P_LOG, sizeof(short)*SAMPLES_PER_FRAME, len, (len*sizeof(short))/2, howmany); + } + + } else if (len == 0) { + DEBUGA_SKYPE("Skype client GONE\n", SKYPIAX_P_LOG); + break; + } else { + ERRORA("len=%d\n", SKYPIAX_P_LOG, len); + exit = 1; + break; + } + /****************************************************************/ + } else if (SAMPLERATE == 16000) { + + + /****************************************************************/ + if (len > 0) { + if (len == SAMPLES_PER_FRAME * sizeof(short)) { + unsigned int howmany; + DEBUGA_SKYPE("SRV recv %d\n", SKYPIAX_P_LOG, len); + howmany = len; + + switch_file_write(p->audiopipe[1], srv_in, &howmany); + p->audiobuf_is_loaded = 0; + DEBUGA_SKYPE("SRV PIPE WRITE=====> req=%d recv=%d to sent=%d sent=%d\n", SKYPIAX_P_LOG, sizeof(short)*SAMPLES_PER_FRAME, len, len, howmany); + }else if (len == SAMPLES_PER_FRAME * sizeof(short) / 2) { + unsigned int howmany; + DEBUGA_SKYPE("SRV recv %d\n", SKYPIAX_P_LOG, len); + if (!p->audiobuf_is_loaded) { + for (i = 0; i < (len / sizeof(short)); i++) { + p->audiobuf[i] = srv_in[i]; + } + p->audiobuf_is_loaded = 1; + } else { + unsigned int howmany = SAMPLES_PER_FRAME * sizeof(short); + short totalbuf[SAMPLES_PER_FRAME]; + + for (i = 0; i < (len / sizeof(short)); i++) + totalbuf[i] = p->audiobuf[i]; + for (a = 0; a < (len / sizeof(short)); a++) { + totalbuf[i] = srv_in[a]; + i++; + } + + switch_file_write(p->audiopipe[1], totalbuf, &howmany); + p->audiobuf_is_loaded = 0; + DEBUGA_SKYPE("SRV PIPE WRITE=====> req=%d recv=%d to sent=%d sent=%d\n", SKYPIAX_P_LOG, SAMPLES_PER_FRAME * sizeof(short), len, SAMPLES_PER_FRAME * sizeof(short), howmany); + } + } else { + + ERRORA("len=%d\n", SKYPIAX_P_LOG, len); + + } + + } else if (len == 0) { + DEBUGA_SKYPE("Skype client GONE\n", SKYPIAX_P_LOG); + break; + } else { + ERRORA("len=%d\n", SKYPIAX_P_LOG, len); + exit = 1; + break; + } + /****************************************************************/ - howmany = len; - switch_file_write(p->audiopipe[1], totalbuf, &howmany); - p->audiobuf_is_loaded = 0; - //DEBUGA_SKYPE("read=====> req=%d recv=%d to sent=%d sent=%d\n", SKYPIAX_P_LOG, sizeof(short)*SAMPLES_PER_FRAME, len, (len*sizeof(short))/2, howmany); - } - } else if (len == 0) { - DEBUGA_SKYPE("Skype client GONE\n", SKYPIAX_P_LOG); - break; - } else { - ERRORA("len=%d\n", SKYPIAX_P_LOG, len); - exit = 1; - break; - } + } else { + + ERRORA("SAMPLERATE can only be 8000 or 16000\n", SKYPIAX_P_LOG); + } } } @@ -286,9 +348,8 @@ FD_SET(fdselect, &fs); to.tv_usec = 10000; to.tv_sec = 0; - //rt = select(fdselect + 1, &fs, NULL, NULL, &to); - //switch_sleep(5000); - rt = 1; + rt = select(fdselect + 1, &fs, NULL, NULL, &to); + //rt = 1; if (rt > 0) { /*********************************************/ if (SAMPLERATE == 8000) { @@ -322,11 +383,11 @@ switch_file_read(p->audioskypepipe[0], cli_in, &got); if (got > 0) { - DEBUGA_SKYPE("CLI PIPE read %d\n", SKYPIAX_P_LOG, got); + //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); + //DEBUGA_SKYPE("CLI PIPE send %d\n", SKYPIAX_P_LOG, len); if (len == 0) { ERRORA("Skype server GONE\n", SKYPIAX_P_LOG); @@ -404,7 +465,7 @@ if (samples != SAMPLES_PER_FRAME * sizeof(short)) { if (samples) - DEBUGA_SKYPE("read=====> NOT GOOD samples=%d expected=%d\n", SKYPIAX_P_LOG, + DEBUGA_SKYPE("SRV PIPE READ=====> NOT GOOD samples=%d expected=%d\n", SKYPIAX_P_LOG, samples, SAMPLES_PER_FRAME * sizeof(short)); //do nothing } else {
participants (1)
-
FreeSWITCH SVN