Browse Source

avfilter/vf_limiter: add support for commands

tags/n4.4
Paul B Mahol 4 years ago
parent
commit
32586a42da
2 changed files with 20 additions and 3 deletions
  1. +4
    -0
      doc/filters.texi
  2. +16
    -3
      libavfilter/vf_limiter.c

+ 4
- 0
doc/filters.texi View File

@@ -13551,6 +13551,10 @@ Upper bound. Defaults to the highest allowed value for the input.
Specify which planes will be processed. Defaults to all available. Specify which planes will be processed. Defaults to all available.
@end table @end table


@subsection Commands

This filter supports the all above options as @ref{commands}.

@section loop @section loop


Loop video frames. Loop video frames.


+ 16
- 3
libavfilter/vf_limiter.c View File

@@ -46,7 +46,7 @@ typedef struct LimiterContext {
} LimiterContext; } LimiterContext;


#define OFFSET(x) offsetof(LimiterContext, x) #define OFFSET(x) offsetof(LimiterContext, x)
#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_RUNTIME_PARAM


static const AVOption limiter_options[] = { static const AVOption limiter_options[] = {
{ "min", "set min value", OFFSET(min), AV_OPT_TYPE_INT, {.i64=0}, 0, 65535, .flags = FLAGS }, { "min", "set min value", OFFSET(min), AV_OPT_TYPE_INT, {.i64=0}, 0, 65535, .flags = FLAGS },
@@ -133,7 +133,7 @@ static void limiter16(const uint8_t *ssrc, uint8_t *ddst,
} }
} }


static int config_props(AVFilterLink *inlink)
static int config_input(AVFilterLink *inlink)
{ {
AVFilterContext *ctx = inlink->dst; AVFilterContext *ctx = inlink->dst;
LimiterContext *s = ctx->priv; LimiterContext *s = ctx->priv;
@@ -230,12 +230,24 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
return ff_filter_frame(outlink, out); return ff_filter_frame(outlink, out);
} }


static int process_command(AVFilterContext *ctx, const char *cmd, const char *args,
char *res, int res_len, int flags)
{
int ret;

ret = ff_filter_process_command(ctx, cmd, args, res, res_len, flags);
if (ret < 0)
return ret;

return config_input(ctx->inputs[0]);
}

static const AVFilterPad inputs[] = { static const AVFilterPad inputs[] = {
{ {
.name = "default", .name = "default",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
.filter_frame = filter_frame, .filter_frame = filter_frame,
.config_props = config_props,
.config_props = config_input,
}, },
{ NULL } { NULL }
}; };
@@ -258,4 +270,5 @@ AVFilter ff_vf_limiter = {
.inputs = inputs, .inputs = inputs,
.outputs = outputs, .outputs = outputs,
.flags = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS, .flags = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
.process_command = process_command,
}; };

Loading…
Cancel
Save