Version 0.1.9 from FTP
authorMark Spencer <markster@digium.com>
Tue, 15 May 2001 22:02:25 +0000 (22:02 +0000)
committerMark Spencer <markster@digium.com>
Tue, 15 May 2001 22:02:25 +0000 (22:02 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@323 65c4cc65-6c06-0410-ace0-fbb531ad65f3

codecs/codec_gsm.c
formats/format_wav_gsm.c

index 35ef9e2..ebad122 100755 (executable)
@@ -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 */
index a729204..679b714 100755 (executable)
@@ -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;
 }