diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 8a0b304382..4a0d2fb950 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -83,6 +83,12 @@ #define FF_API_OLD_AUDIOCONVERT (LIBAVCODEC_VERSION_MAJOR < 53) #endif +#if LIBAVCODEC_VERSION_MAJOR < 53 +# define FF_INTERNALC_MEM_TYPE unsigned int +#else +# define FF_INTERNALC_MEM_TYPE size_t +#endif + #define AV_NOPTS_VALUE INT64_C(0x8000000000000000) #define AV_TIME_BASE 1000000 #define AV_TIME_BASE_Q (AVRational){1, AV_TIME_BASE} @@ -4007,7 +4013,7 @@ AVBitStreamFilter *av_bitstream_filter_next(AVBitStreamFilter *f); * * @see av_realloc */ -void *av_fast_realloc(void *ptr, unsigned int *size, unsigned int min_size); +void *av_fast_realloc(void *ptr, unsigned int *size, FF_INTERNALC_MEM_TYPE min_size); /** * Allocate a buffer, reusing the given one if large enough. @@ -4021,7 +4027,7 @@ void *av_fast_realloc(void *ptr, unsigned int *size, unsigned int min_size); * @param min_size minimum size of *ptr buffer after returning, *ptr will be NULL and * *size 0 if an error occurred. */ -void av_fast_malloc(void *ptr, unsigned int *size, unsigned int min_size); +void av_fast_malloc(void *ptr, unsigned int *size, FF_INTERNALC_MEM_TYPE min_size); #if LIBAVCODEC_VERSION_MAJOR < 53 /** diff --git a/libavcodec/utils.c b/libavcodec/utils.c index 4a713136a0..69d333eabc 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -48,29 +48,32 @@ static int volatile entangled_thread_counter=0; int (*ff_lockmgr_cb)(void **mutex, enum AVLockOp op); static void *codec_mutex; -void *av_fast_realloc(void *ptr, unsigned int *size, unsigned int min_size) +void *av_fast_realloc(void *ptr, unsigned int *size, FF_INTERNALC_MEM_TYPE min_size) { if(min_size < *size) return ptr; - *size= FFMAX(17*min_size/16 + 32, min_size); + min_size= FFMAX(17*min_size/16 + 32, min_size); - ptr= av_realloc(ptr, *size); + ptr= av_realloc(ptr, min_size); if(!ptr) //we could set this to the unmodified min_size but this is safer if the user lost the ptr and uses NULL now - *size= 0; + min_size= 0; + + *size= min_size; return ptr; } -void av_fast_malloc(void *ptr, unsigned int *size, unsigned int min_size) +void av_fast_malloc(void *ptr, unsigned int *size, FF_INTERNALC_MEM_TYPE min_size) { void **p = ptr; if (min_size < *size) return; - *size= FFMAX(17*min_size/16 + 32, min_size); + min_size= FFMAX(17*min_size/16 + 32, min_size); av_free(*p); - *p = av_malloc(*size); - if (!*p) *size = 0; + *p = av_malloc(min_size); + if (!*p) min_size = 0; + *size= min_size; } /* encoder management */