@@ -511,26 +511,6 @@ static void assert_codec_experimental(AVCodecContext *c, int encoder) | |||||
} | } | ||||
} | } | ||||
/* similar to ff_dynarray_add() and av_fast_realloc() */ | |||||
static void *grow_array(void *array, int elem_size, int *size, int new_size) | |||||
{ | |||||
if (new_size >= INT_MAX / elem_size) { | |||||
fprintf(stderr, "Array too big.\n"); | |||||
exit_program(1); | |||||
} | |||||
if (*size < new_size) { | |||||
uint8_t *tmp = av_realloc(array, new_size*elem_size); | |||||
if (!tmp) { | |||||
fprintf(stderr, "Could not alloc buffer.\n"); | |||||
exit_program(1); | |||||
} | |||||
memset(tmp + *size*elem_size, 0, (new_size-*size) * elem_size); | |||||
*size = new_size; | |||||
return tmp; | |||||
} | |||||
return array; | |||||
} | |||||
static void choose_sample_fmt(AVStream *st, AVCodec *codec) | static void choose_sample_fmt(AVStream *st, AVCodec *codec) | ||||
{ | { | ||||
if(codec && codec->sample_fmts){ | if(codec && codec->sample_fmts){ | ||||
@@ -931,4 +931,23 @@ int get_filtered_video_frame(AVFilterContext *ctx, AVFrame *frame, | |||||
return 1; | return 1; | ||||
} | } | ||||
void *grow_array(void *array, int elem_size, int *size, int new_size) | |||||
{ | |||||
if (new_size >= INT_MAX / elem_size) { | |||||
av_log(NULL, AV_LOG_ERROR, "Array too big.\n"); | |||||
exit_program(1); | |||||
} | |||||
if (*size < new_size) { | |||||
uint8_t *tmp = av_realloc(array, new_size*elem_size); | |||||
if (!tmp) { | |||||
av_log(NULL, AV_LOG_ERROR, "Could not alloc buffer.\n"); | |||||
exit_program(1); | |||||
} | |||||
memset(tmp + *size*elem_size, 0, (new_size-*size) * elem_size); | |||||
*size = new_size; | |||||
return tmp; | |||||
} | |||||
return array; | |||||
} | |||||
#endif /* CONFIG_AVFILTER */ | #endif /* CONFIG_AVFILTER */ |
@@ -333,4 +333,14 @@ int get_filtered_video_frame(AVFilterContext *sink, AVFrame *frame, | |||||
*/ | */ | ||||
void exit_program(int ret); | void exit_program(int ret); | ||||
/** | |||||
* Realloc array to hold new_size elements of elem_size. | |||||
* Calls exit_program() on failure. | |||||
* | |||||
* @param elem_size size in bytes of each element | |||||
* @param size new element count will be written here | |||||
* @return reallocated array | |||||
*/ | |||||
void *grow_array(void *array, int elem_size, int *size, int new_size); | |||||
#endif /* LIBAV_CMDUTILS_H */ | #endif /* LIBAV_CMDUTILS_H */ |
@@ -529,26 +529,6 @@ static void assert_codec_experimental(AVCodecContext *c, int encoder) | |||||
} | } | ||||
} | } | ||||
/* similar to ff_dynarray_add() and av_fast_realloc() */ | |||||
static void *grow_array(void *array, int elem_size, int *size, int new_size) | |||||
{ | |||||
if (new_size >= INT_MAX / elem_size) { | |||||
fprintf(stderr, "Array too big.\n"); | |||||
exit_program(1); | |||||
} | |||||
if (*size < new_size) { | |||||
uint8_t *tmp = av_realloc(array, new_size*elem_size); | |||||
if (!tmp) { | |||||
fprintf(stderr, "Could not alloc buffer.\n"); | |||||
exit_program(1); | |||||
} | |||||
memset(tmp + *size*elem_size, 0, (new_size-*size) * elem_size); | |||||
*size = new_size; | |||||
return tmp; | |||||
} | |||||
return array; | |||||
} | |||||
static void choose_sample_fmt(AVStream *st, AVCodec *codec) | static void choose_sample_fmt(AVStream *st, AVCodec *codec) | ||||
{ | { | ||||
if(codec && codec->sample_fmts){ | if(codec && codec->sample_fmts){ | ||||