cmdutils: move grow_array() from avconv to cmdutils.

pull/2/head
Anton Khirnov 13 years ago
parent dad09ff93f
commit cac651c834
  1. 20
      avconv.c
  2. 19
      cmdutils.c
  3. 10
      cmdutils.h
  4. 20
      ffmpeg.c

@ -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){

Loading…
Cancel
Save