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 */
{
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;
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;
}