diff options
author | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2001-05-15 22:02:25 +0000 |
---|---|---|
committer | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2001-05-15 22:02:25 +0000 |
commit | b529c3b31e2e07a76d67f46735c84dd1d4170d4d (patch) | |
tree | fdc6ce804f8578c0f751c6f6d0f9f8aaf66e8364 /formats | |
parent | 9d0aa4c7504d2ff625cc2cb47a31692d63bf68e1 (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')
-rwxr-xr-x | formats/format_wav_gsm.c | 28 |
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; } |