for (; i >= 0; --i) {
av_freep(&s->gauss[i]);
}
- av_log(ctx, AV_LOG_ERROR, "Out of memory while allocating gauss buffers.\n");
return AVERROR(ENOMEM);
}
}
td->data[b][p] = av_mallocz_array(s->planeheight[p] * s->planewidth[p], sizeof(*td->data[b][p]));
if (!td->data[b][p]) {
cleanup_derivative_buffers(td, b + 1, p);
- av_log(ctx, AV_LOG_ERROR, "Out of memory while allocating derivatives buffers.\n");
return AVERROR(ENOMEM);
}
}
dst[INDX2D(r, c, width)] = 0;
for (g = 0; g < filtersize; ++g) {
dst[INDX2D(r, c, width)] += GAUSS(src, r, c + GINDX(filtersize, g),
- in_linesize, height, width, gauss[GINDX(filtersize, g)]);
+ in_linesize, height, width, gauss[g]);
}
}
}
dst[INDX2D(r, c, width)] = 0;
for (g = 0; g < filtersize; ++g) {
dst[INDX2D(r, c, width)] += GAUSS(src, r + GINDX(filtersize, g), c,
- width, height, width, gauss[GINDX(filtersize, g)]);
+ width, height, width, gauss[g]);
}
}
}
AVFilterLink *outlink = ctx->outputs[0];
AVFrame *out;
int ret;
+ int direct = 0;
ret = illumination_estimation(ctx, in);
if (ret) {
+ av_frame_free(&in);
return ret;
}
if (av_frame_is_writable(in)) {
+ direct = 1;
out = in;
} else {
out = ff_get_video_buffer(outlink, outlink->w, outlink->h);
if (!out) {
- av_log(ctx, AV_LOG_ERROR, "Out of memory while allocating output video buffer.\n");
+ av_frame_free(&in);
return AVERROR(ENOMEM);
}
av_frame_copy_props(out, in);
}
chromatic_adaptation(ctx, in, out);
+ if (!direct)
+ av_frame_free(&in);
+
return ff_filter_frame(outlink, out);
}
AVFILTER_DEFINE_CLASS(greyedge);
-AVFilter ff_vf_greyedge = {
+const AVFilter ff_vf_greyedge = {
.name = GREY_EDGE,
.description = NULL_IF_CONFIG_SMALL("Estimates scene illumination by grey edge assumption."),
.priv_size = sizeof(ColorConstancyContext),