aboutsummaryrefslogtreecommitdiffstats
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
parent9d0aa4c7504d2ff625cc2cb47a31692d63bf68e1 (diff)
Version 0.1.9 from FTP
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@323 f38db490-d61c-443f-a65b-d21fe96a405b
-rwxr-xr-xcodecs/codec_gsm.c4
-rwxr-xr-xformats/format_wav_gsm.c28
2 files changed, 18 insertions, 14 deletions
diff --git a/codecs/codec_gsm.c b/codecs/codec_gsm.c
index 35ef9e2d9..ebad1225f 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 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;
}