# HG changeset patch # User michael # Date 1079906294 0 # Node ID 5cde80c5d929176c96c37dad5f48902c47978a8c # Parent 379a18a7131fb588928199e5442fba8fe8035036 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 diff -r 379a18a7131f -r 5cde80c5d929 avcodec.h --- 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); diff -r 379a18a7131f -r 5cde80c5d929 mpegaudiodec.c --- 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(); diff -r 379a18a7131f -r 5cde80c5d929 utils.c --- 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); } /**