Merge commit '5d839778b9f3edb682b7f71dde4f80f07c75b098'

* commit '5d839778b9f3edb682b7f71dde4f80f07c75b098':
  lavu: Refactor side data wiping

Conflicts:
	libavutil/frame.c

See: a400edbb6d
Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
Michael Niedermayer 2014-12-19 03:57:12 +01:00
commit bce06eb059

View File

@ -120,6 +120,18 @@ static void free_side_data(AVFrameSideData **ptr_sd)
av_freep(ptr_sd); av_freep(ptr_sd);
} }
static void wipe_side_data(AVFrame *frame)
{
int i;
for (i = 0; i < frame->nb_side_data; i++) {
free_side_data(&frame->side_data[i]);
}
frame->nb_side_data = 0;
av_freep(&frame->side_data);
}
AVFrame *av_frame_alloc(void) AVFrame *av_frame_alloc(void)
{ {
AVFrame *frame = av_mallocz(sizeof(*frame)); AVFrame *frame = av_mallocz(sizeof(*frame));
@ -366,10 +378,7 @@ void av_frame_unref(AVFrame *frame)
{ {
int i; int i;
for (i = 0; i < frame->nb_side_data; i++) { wipe_side_data(frame);
free_side_data(&frame->side_data[i]);
}
av_freep(&frame->side_data);
for (i = 0; i < FF_ARRAY_ELEMS(frame->buf); i++) for (i = 0; i < FF_ARRAY_ELEMS(frame->buf); i++)
av_buffer_unref(&frame->buf[i]); av_buffer_unref(&frame->buf[i]);
@ -499,11 +508,7 @@ int av_frame_copy_props(AVFrame *dst, const AVFrame *src)
sd_dst = av_frame_new_side_data(dst, sd_src->type, sd_dst = av_frame_new_side_data(dst, sd_src->type,
sd_src->size); sd_src->size);
if (!sd_dst) { if (!sd_dst) {
for (i = 0; i < dst->nb_side_data; i++) { wipe_side_data(dst);
free_side_data(&dst->side_data[i]);
}
av_freep(&dst->side_data);
dst->nb_side_data = 0;
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
} }
memcpy(sd_dst->data, sd_src->data, sd_src->size); memcpy(sd_dst->data, sd_src->data, sd_src->size);