av_log(ctx, AV_LOG_DEBUG, "Single frame:%s, Multi frame:%s\n", type2str(type), type2str(idet->last_type));
}
-static void start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
+static int start_frame(AVFilterLink *link, AVFilterBufferRef *picref)
{
AVFilterContext *ctx = link->dst;
IDETContext *idet = ctx->priv;
idet->next = picref;
if (!idet->cur)
- return;
+ return 0;
if (!idet->prev)
- idet->prev = avfilter_ref_buffer(idet->cur, AV_PERM_READ);
+ idet->prev = avfilter_ref_buffer(idet->cur, ~0);
- ff_start_frame(ctx->outputs[0], avfilter_ref_buffer(idet->cur, AV_PERM_READ));
+ return ff_start_frame(ctx->outputs[0], avfilter_ref_buffer(idet->cur, ~0));
}
-static void end_frame(AVFilterLink *link)
+static int end_frame(AVFilterLink *link)
{
AVFilterContext *ctx = link->dst;
IDETContext *idet = ctx->priv;
if (!idet->cur)
- return;
+ return 0;
if (!idet->csp)
idet->csp = &av_pix_fmt_descriptors[link->format];
filter(ctx);
ff_draw_slice(ctx->outputs[0], 0, link->h, 1);
- ff_end_frame(ctx->outputs[0]);
+ return ff_end_frame(ctx->outputs[0]);
}
static int request_frame(AVFilterLink *link)
do {
int ret;
- if ((ret = avfilter_request_frame(link->src->inputs[0])))
+ if ((ret = ff_request_frame(link->src->inputs[0])))
return ret;
} while (!idet->cur);
val = ff_poll_frame(link->src->inputs[0]);
if (val >= 1 && !idet->next) { //FIXME change API to not requre this red tape
- if ((ret = avfilter_request_frame(link->src->inputs[0])) < 0)
+ if ((ret = ff_request_frame(link->src->inputs[0])) < 0)
return ret;
val = ff_poll_frame(link->src->inputs[0]);
}
return 0;
}
-static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque)
+static av_cold int init(AVFilterContext *ctx, const char *args)
{
IDETContext *idet = ctx->priv;
return 0;
}
-static void null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir) { }
+static int null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir) { return 0; }
AVFilter avfilter_vf_idet = {
.name = "idet",
.start_frame = start_frame,
.draw_slice = null_draw_slice,
.end_frame = end_frame,
- .rej_perms = AV_PERM_REUSE2, },
+ .min_perms = AV_PERM_PRESERVE },
{ .name = NULL}},
.outputs = (const AVFilterPad[]) {{ .name = "default",
.type = AVMEDIA_TYPE_VIDEO,
+ .rej_perms = AV_PERM_WRITE,
.poll_frame = poll_frame,
.request_frame = request_frame, },
{ .name = NULL}},