av_frame_free(&dm->queue[i].frame);
} else {
AVFrame *frame = dm->queue[i].frame;
+ dm->queue[i].frame = NULL;
if (frame->pts != AV_NOPTS_VALUE && dm->start_pts == AV_NOPTS_VALUE)
dm->start_pts = frame->pts;
if (dm->ppsrc) {
av_frame_free(&frame);
frame = dm->clean_src[i];
+ dm->clean_src[i] = NULL;
}
frame->pts = av_rescale_q(outlink->frame_count_in, dm->ts_unit, (AVRational){1,1}) +
(dm->start_pts == AV_NOPTS_VALUE ? 0 : dm->start_pts);
{
DecimateContext *dm = ctx->priv;
AVFilterPad pad = {
- .name = av_strdup("main"),
+ .name = "main",
.type = AVMEDIA_TYPE_VIDEO,
.filter_frame = filter_frame,
.config_props = config_input,
};
int ret;
- if (!pad.name)
- return AVERROR(ENOMEM);
- if ((ret = ff_insert_inpad(ctx, INPUT_MAIN, &pad)) < 0) {
- av_freep(&pad.name);
+ if ((ret = ff_insert_inpad(ctx, INPUT_MAIN, &pad)) < 0)
return ret;
- }
if (dm->ppsrc) {
- pad.name = av_strdup("clean_src");
+ pad.name = "clean_src";
pad.config_props = NULL;
- if (!pad.name)
- return AVERROR(ENOMEM);
- if ((ret = ff_insert_inpad(ctx, INPUT_CLEANSRC, &pad)) < 0) {
- av_freep(&pad.name);
+ if ((ret = ff_insert_inpad(ctx, INPUT_CLEANSRC, &pad)) < 0)
return ret;
- }
}
if ((dm->blockx & (dm->blockx - 1)) ||
av_frame_free(&dm->last);
av_freep(&dm->bdiffs);
+ if (dm->queue) {
+ for (i = 0; i < dm->cycle; i++)
+ av_frame_free(&dm->queue[i].frame);
+ }
av_freep(&dm->queue);
+ if (dm->clean_src) {
+ for (i = 0; i < dm->cycle; i++)
+ av_frame_free(&dm->clean_src[i]);
+ }
av_freep(&dm->clean_src);
- for (i = 0; i < ctx->nb_inputs; i++)
- av_freep(&ctx->input_pads[i].name);
}
static int request_inlink(AVFilterContext *ctx, int lid)