diff options
author | Jean-Marc Valin <jean-marc.valin@usherbrooke.ca> | 2008-10-18 15:44:35 +0400 |
---|---|---|
committer | Jean-Marc Valin <jean-marc.valin@usherbrooke.ca> | 2008-10-18 15:44:35 +0400 |
commit | 8679a80ee2a4211b53600a84a7e2d275d3b9a79b (patch) | |
tree | 108268d0601fb5a5ee7bf150c5cbac7a4b216af0 /libcelt/entenc.c | |
parent | 56cb5cf31fcff1d5dcdaa51b8b6c6603657d9c1a (diff) |
Encoder now writes data directly in the user buffer
Diffstat (limited to 'libcelt/entenc.c')
-rw-r--r-- | libcelt/entenc.c | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/libcelt/entenc.c b/libcelt/entenc.c index 46e07d4..1a9f5ba 100644 --- a/libcelt/entenc.c +++ b/libcelt/entenc.c @@ -4,11 +4,16 @@ #include "os_support.h" #include "entenc.h" - +#include "arch.h" #define EC_BUFFER_INCREMENT (256) +void ec_byte_writeinit_buffer(ec_byte_buffer *_b, unsigned char *_buf, long _size){ + _b->ptr=_b->buf=_buf; + _b->storage=_size; +} + void ec_byte_writeinit(ec_byte_buffer *_b){ _b->ptr=_b->buf=celt_alloc(EC_BUFFER_INCREMENT*sizeof(char)); _b->storage=EC_BUFFER_INCREMENT; @@ -22,9 +27,7 @@ void ec_byte_write1(ec_byte_buffer *_b,unsigned _value){ ptrdiff_t endbyte; endbyte=_b->ptr-_b->buf; if(endbyte>=_b->storage){ - _b->buf=celt_realloc(_b->buf,(_b->storage+EC_BUFFER_INCREMENT)*sizeof(char)); - _b->storage+=EC_BUFFER_INCREMENT; - _b->ptr=_b->buf+endbyte; + celt_fatal("range encoder overflow\n"); } *(_b->ptr++)=(unsigned char)_value; } @@ -33,9 +36,7 @@ void ec_byte_write4(ec_byte_buffer *_b,ec_uint32 _value){ ptrdiff_t endbyte; endbyte=_b->ptr-_b->buf; if(endbyte+4>_b->storage){ - _b->buf=celt_realloc(_b->buf,(_b->storage+EC_BUFFER_INCREMENT)*sizeof(char)); - _b->storage+=EC_BUFFER_INCREMENT; - _b->ptr=_b->buf+endbyte; + celt_fatal("range encoder overflow\n"); } *(_b->ptr++)=(unsigned char)_value; _value>>=8; @@ -50,9 +51,7 @@ void ec_byte_writecopy(ec_byte_buffer *_b,void *_source,long _bytes){ ptrdiff_t endbyte; endbyte=_b->ptr-_b->buf; if(endbyte+_bytes>_b->storage){ - _b->storage=endbyte+_bytes+EC_BUFFER_INCREMENT; - _b->buf=celt_realloc(_b->buf,_b->storage*sizeof(char)); - _b->ptr=_b->buf+endbyte; + celt_fatal("range encoder overflow\n"); } memmove(_b->ptr,_source,_bytes); _b->ptr+=_bytes; |