aboutsummaryrefslogtreecommitdiffstats
path: root/formats/format_wav_gsm.c
diff options
context:
space:
mode:
authormarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2001-05-15 22:02:25 +0000
committermarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2001-05-15 22:02:25 +0000
commitb529c3b31e2e07a76d67f46735c84dd1d4170d4d (patch)
treefdc6ce804f8578c0f751c6f6d0f9f8aaf66e8364 /formats/format_wav_gsm.c
parent9d0aa4c7504d2ff625cc2cb47a31692d63bf68e1 (diff)
Version 0.1.9 from FTP
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@323 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'formats/format_wav_gsm.c')
-rwxr-xr-xformats/format_wav_gsm.c28
1 files changed, 16 insertions, 12 deletions
diff --git a/formats/format_wav_gsm.c b/formats/format_wav_gsm.c
index a7292043a..679b714a9 100755
--- a/formats/format_wav_gsm.c
+++ b/formats/format_wav_gsm.c
@@ -504,6 +504,7 @@ static int wav_write(struct ast_filestream *fs, struct ast_frame *f)
{
int res;
char msdata[66];
+ int len =0;
if (f->frametype != AST_FRAME_VOICE) {
ast_log(LOG_WARNING, "Asked to write non-voice frame!\n");
return -1;
@@ -512,20 +513,23 @@ static int wav_write(struct ast_filestream *fs, struct ast_frame *f)
ast_log(LOG_WARNING, "Asked to write non-GSM frame (%d)!\n", f->subclass);
return -1;
}
- if (fs->secondhalf) {
- memcpy(fs->gsm + 33, f->data, 33);
- conv66(fs->gsm, msdata);
- if ((res = write(fs->fd, msdata, 65)) != 65) {
- ast_log(LOG_WARNING, "Bad write (%d/65): %s\n", res, strerror(errno));
- return -1;
+ while(len < f->datalen) {
+ if (fs->secondhalf) {
+ memcpy(fs->gsm + 33, f->data + len, 33);
+ conv66(fs->gsm, msdata);
+ if ((res = write(fs->fd, msdata, 65)) != 65) {
+ ast_log(LOG_WARNING, "Bad write (%d/65): %s\n", res, strerror(errno));
+ return -1;
+ }
+ fs->bytes += 65;
+ update_header(fs->fd, fs->bytes);
+ } else {
+ /* Copy the data and do nothing */
+ memcpy(fs->gsm, f->data + len, 33);
}
- fs->bytes += 65;
- update_header(fs->fd, fs->bytes);
- } else {
- /* Copy the data and do nothing */
- memcpy(fs->gsm, f->data, 33);
+ fs->secondhalf = !fs->secondhalf;
+ len += 33;
}
- fs->secondhalf = !fs->secondhalf;
return 0;
}