Mercurial > libavcodec.hg
changeset 1900:5cde80c5d929 libavcodec
static allocation rewrite (old code was plain a broken mess)
doesnt call realloc every time
doesnt randomly overwrite memory after after 8-16 calls
doesnt use ugly macro wraper
fewer lines of code
author | michael |
---|---|
date | Sun, 21 Mar 2004 21:58:14 +0000 |
parents | 379a18a7131f |
children | bc5039adb9af |
files | avcodec.h mpegaudiodec.c utils.c |
diffstat | 3 files changed, 23 insertions(+), 30 deletions(-) [+] |
line wrap: on
line diff
--- a/avcodec.h Sat Mar 20 16:40:20 2004 +0000 +++ b/avcodec.h Sun Mar 21 21:58:14 2004 +0000 @@ -2096,8 +2096,7 @@ /* for static data only */ /* call av_free_static to release all staticaly allocated tables */ void av_free_static(void); -void *__av_mallocz_static(void** location, unsigned int size); -#define av_mallocz_static(p, s) __av_mallocz_static((void **)(p), s) +void *av_mallocz_static(unsigned int size); /* add by bero : in adx.c */ int is_adx(const unsigned char *buf,size_t bufsize);
--- a/mpegaudiodec.c Sat Mar 20 16:40:20 2004 +0000 +++ b/mpegaudiodec.c Sun Mar 21 21:58:14 2004 +0000 @@ -400,11 +400,11 @@ } /* compute n ^ (4/3) and store it in mantissa/exp format */ - if (!av_mallocz_static(&table_4_3_exp, - TABLE_4_3_SIZE * sizeof(table_4_3_exp[0]))) + table_4_3_exp= av_mallocz_static(TABLE_4_3_SIZE * sizeof(table_4_3_exp[0])); + if(!table_4_3_exp) return -1; - if (!av_mallocz_static(&table_4_3_value, - TABLE_4_3_SIZE * sizeof(table_4_3_value[0]))) + table_4_3_value= av_mallocz_static(TABLE_4_3_SIZE * sizeof(table_4_3_value[0])); + if(!table_4_3_value) return -1; int_pow_init();
--- a/utils.c Sat Mar 20 16:40:20 2004 +0000 +++ b/utils.c Sun Mar 21 21:58:14 2004 +0000 @@ -66,41 +66,35 @@ } -/* allocation of static arrays - do not use for normal allocation */ static unsigned int last_static = 0; -static char*** array_static = NULL; +static unsigned int allocated_static = 0; +static void** array_static = NULL; static const unsigned int grow_static = 64; // ^2 -void *__av_mallocz_static(void** location, unsigned int size) + +/** + * allocation of static arrays - do not use for normal allocation. + */ +void *av_mallocz_static(unsigned int size) { - unsigned int l = (last_static + grow_static) & ~(grow_static - 1); void *ptr = av_mallocz(size); - if (!ptr) - return NULL; - if (location) - { - if (l > last_static) - array_static = av_realloc(array_static, l); - array_static[last_static++] = (char**) location; - *location = ptr; + if(ptr){ + array_static =av_fast_realloc(array_static, &allocated_static, last_static+1); + array_static[last_static++] = ptr; } + return ptr; } -/* free all static arrays and reset pointers to 0 */ + +/** + * free all static arrays and reset pointers to 0. + */ void av_free_static(void) { - if (array_static) - { - unsigned i; - for (i = 0; i < last_static; i++) - { - av_free(*array_static[i]); - *array_static[i] = NULL; - } - av_free(array_static); - array_static = 0; + while(last_static){ + av_freep(&array_static[--last_static]); } - last_static = 0; + av_freep(&array_static); } /**