avfilter/vf_pullup: Factor free_field_queue() out

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
Michael Niedermayer 2013-12-13 15:13:01 +01:00
parent b02d87936b
commit 8f9569cfac
1 changed files with 17 additions and 13 deletions

View File

@ -126,6 +126,22 @@ static int alloc_metrics(PullupContext *s, PullupField *f)
return 0; return 0;
} }
static void free_field_queue(PullupField *head, PullupField **last)
{
PullupField *f = head;
while (f) {
av_free(f->diffs);
av_free(f->combs);
av_free(f->vars);
if (f == *last) {
av_freep(last);
break;
}
f = f->next;
av_freep(&f->prev);
};
}
static PullupField *make_field_queue(PullupContext *s, int len) static PullupField *make_field_queue(PullupContext *s, int len)
{ {
PullupField *head, *f; PullupField *head, *f;
@ -714,21 +730,9 @@ end:
static av_cold void uninit(AVFilterContext *ctx) static av_cold void uninit(AVFilterContext *ctx)
{ {
PullupContext *s = ctx->priv; PullupContext *s = ctx->priv;
PullupField *f;
int i; int i;
f = s->head; free_field_queue(s->head, &s->last);
while (f) {
av_free(f->diffs);
av_free(f->combs);
av_free(f->vars);
if (f == s->last) {
av_freep(&s->last);
break;
}
f = f->next;
av_freep(&f->prev);
};
for (i = 0; i < FF_ARRAY_ELEMS(s->buffers); i++) { for (i = 0; i < FF_ARRAY_ELEMS(s->buffers); i++) {
av_freep(&s->buffers[i].planes[0]); av_freep(&s->buffers[i].planes[0]);