diff options
author | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-03-13 03:52:14 +0000 |
---|---|---|
committer | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-03-13 03:52:14 +0000 |
commit | 5d2aed2d6d40f577334e5df9fcfc7277a5495787 (patch) | |
tree | c30d90fcd24175084edb8bc6c193b0d727af14e0 /frame.c | |
parent | 894a6228fe7ecc38bcc2f4cbe349b965f29421a4 (diff) |
Move timestamp around in RTP.... Gotta do iax2 eventually here...
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@2413 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'frame.c')
-rwxr-xr-x | frame.c | 15 |
1 files changed, 14 insertions, 1 deletions
@@ -40,6 +40,7 @@ struct ast_smoother { int optimizablestream; float samplesperbyte; struct ast_frame f; + struct timeval delivery; char data[SMOOTHER_SIZE]; char framedata[SMOOTHER_SIZE + AST_FRIENDLY_OFFSET]; struct ast_frame *opt; @@ -103,6 +104,9 @@ int ast_smoother_feed(struct ast_smoother *s, struct ast_frame *f) } else s->optimizablestream = 0; memcpy(s->data + s->len, f->data, f->datalen); + /* If we're empty, reset delivery time */ + if (!s->len) + s->delivery = f->delivery; s->len += f->datalen; return 0; } @@ -129,12 +133,20 @@ struct ast_frame *ast_smoother_read(struct ast_smoother *s) s->f.offset = AST_FRIENDLY_OFFSET; s->f.datalen = s->size; s->f.samples = s->size * s->samplesperbyte; + s->f.delivery = s->delivery; /* Fill Data */ memcpy(s->f.data, s->data, s->size); s->len -= s->size; /* Move remaining data to the front if applicable */ - if (s->len) + if (s->len) { memmove(s->data, s->data + s->size, s->len); + s->delivery.tv_sec += (s->size * s->samplesperbyte) / 8000.0; + s->delivery.tv_usec += (((int)(s->size * s->samplesperbyte)) % 8000) * 125; + if (s->delivery.tv_usec > 1000000) { + s->delivery.tv_usec -= 1000000; + s->delivery.tv_sec += 1; + } + } /* Return frame */ return &s->f; } @@ -257,6 +269,7 @@ struct ast_frame *ast_frdup(struct ast_frame *f) out->subclass = f->subclass; out->datalen = f->datalen; out->samples = f->samples; + out->delivery = f->delivery; out->mallocd = AST_MALLOCD_HDR; out->offset = AST_FRIENDLY_OFFSET; out->data = buf + sizeof(struct ast_frame) + AST_FRIENDLY_OFFSET; |