diff options
author | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2002-09-03 15:11:04 +0000 |
---|---|---|
committer | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2002-09-03 15:11:04 +0000 |
commit | 1a9cb34a53315eec094c7937b4a0e3db1ce841bc (patch) | |
tree | 434d7ea56f356809784d8476aedb96acc85ed798 /frame.c | |
parent | 3083c13a2823feea44f13981f7c7f434498b7bd1 (diff) |
Version 0.2.0 from FTP
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@514 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'frame.c')
-rwxr-xr-x | frame.c | 15 |
1 files changed, 10 insertions, 5 deletions
@@ -44,9 +44,11 @@ struct ast_smoother { struct ast_smoother *ast_smoother_new(int size) { struct ast_smoother *s; + if (size < 1) + return NULL; s = malloc(sizeof(struct ast_smoother)); if (s) { - memset(s, 0, sizeof(s)); + memset(s, 0, sizeof(struct ast_smoother)); s->size = size; } return s; @@ -77,21 +79,22 @@ int ast_smoother_feed(struct ast_smoother *s, struct ast_frame *f) struct ast_frame *ast_smoother_read(struct ast_smoother *s) { /* Make sure we have enough data */ - if (s->len < s->size) + if (s->len < s->size) { return NULL; + } /* Make frame */ s->f.frametype = AST_FRAME_VOICE; s->f.subclass = s->format; - s->f.data = s->framedata; + s->f.data = s->framedata + AST_FRIENDLY_OFFSET; s->f.offset = AST_FRIENDLY_OFFSET; s->f.datalen = s->size; s->f.timelen = s->size * s->timeperbyte; /* Fill Data */ - memcpy(s->f.data + AST_FRIENDLY_OFFSET, s->f.data, s->size); + memcpy(s->f.data, s->data, s->size); s->len -= s->size; /* Move remaining data to the front if applicable */ if (s->len) - memmove(s->f.data, s->f.data + s->size, s->len); + memmove(s->data, s->data + s->size, s->len); /* Return frame */ return &s->f; } @@ -296,6 +299,8 @@ int ast_getformatbyname(char *name) return AST_FORMAT_LPC10; else if (!strcasecmp(name, "adpcm")) return AST_FORMAT_ADPCM; + else if (!strcasecmp(name, "speex")) + return AST_FORMAT_SPEEX; else if (!strcasecmp(name, "all")) return 0x7FFFFFFF; return 0; |