From d9a7d03d8d2692d31072b046da69a82ed7a33d68 Mon Sep 17 00:00:00 2001 From: Mark Spencer <markster@digium.com> Date: Tue, 15 May 2001 22:02:25 +0000 Subject: [PATCH] Version 0.1.9 from FTP git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@323 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- codecs/codec_gsm.c | 4 ++-- formats/format_wav_gsm.c | 28 ++++++++++++++++------------ 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/codecs/codec_gsm.c b/codecs/codec_gsm.c index 35ef9e2d99..ebad1225f3 100755 --- a/codecs/codec_gsm.c +++ b/codecs/codec_gsm.c @@ -177,10 +177,10 @@ static struct ast_frame *lintogsm_frameout(struct ast_translator_pvt *tmp) while(tmp->tail >= 160) { if ((x+1) * 33 >= sizeof(tmp->outbuf)) { ast_log(LOG_WARNING, "Out of buffer space\n"); - return NULL; + break; } /* Encode a frame of data */ - gsm_encode(tmp->gsm, tmp->buf, (gsm_byte *) tmp->outbuf + (x * 33)); + gsm_encode(tmp->gsm, tmp->buf, ((gsm_byte *) tmp->outbuf) + (x * 33)); /* Assume 8000 Hz -- 20 ms */ tmp->tail -= 160; /* Move the data at the end of the buffer to the front */ diff --git a/formats/format_wav_gsm.c b/formats/format_wav_gsm.c index a7292043a9..679b714a95 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; } -- GitLab