|
|
|
@ -206,21 +206,6 @@ static int filter_frame(AVFilterLink *link, AVFrame *picref) |
|
|
|
|
return ff_filter_frame(ctx->outputs[0], av_frame_clone(idet->cur)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static int request_frame(AVFilterLink *link) |
|
|
|
|
{ |
|
|
|
|
AVFilterContext *ctx = link->src; |
|
|
|
|
IDETContext *idet = ctx->priv; |
|
|
|
|
|
|
|
|
|
do { |
|
|
|
|
int ret; |
|
|
|
|
|
|
|
|
|
if ((ret = ff_request_frame(link->src->inputs[0]))) |
|
|
|
|
return ret; |
|
|
|
|
} while (!idet->cur); |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static av_cold void uninit(AVFilterContext *ctx) |
|
|
|
|
{ |
|
|
|
|
IDETContext *idet = ctx->priv; |
|
|
|
@ -273,6 +258,12 @@ static int query_formats(AVFilterContext *ctx) |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static int config_output(AVFilterLink *outlink) |
|
|
|
|
{ |
|
|
|
|
outlink->flags |= FF_LINK_FLAG_REQUEST_LOOP; |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static av_cold int init(AVFilterContext *ctx) |
|
|
|
|
{ |
|
|
|
|
IDETContext *idet = ctx->priv; |
|
|
|
@ -299,7 +290,7 @@ static const AVFilterPad idet_outputs[] = { |
|
|
|
|
{ |
|
|
|
|
.name = "default", |
|
|
|
|
.type = AVMEDIA_TYPE_VIDEO, |
|
|
|
|
.request_frame = request_frame, |
|
|
|
|
.config_props = config_output, |
|
|
|
|
}, |
|
|
|
|
{ NULL } |
|
|
|
|
}; |
|
|
|
|