Commit ab6091f8 authored by Michael Niedermayer's avatar Michael Niedermayer

Merge commit '7536c671'

* commit '7536c671':
  vf_yadif: switch to an AVOptions-based system.

Conflicts:
	doc/filters.texi
	libavfilter/vf_yadif.c
	libavfilter/yadif.h
Merged-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parents 8ac7090c 7536c671
...@@ -5668,17 +5668,13 @@ ffmpeg -i in.avi -vf "vflip" out.avi ...@@ -5668,17 +5668,13 @@ ffmpeg -i in.avi -vf "vflip" out.avi
Deinterlace the input video ("yadif" means "yet another deinterlacing Deinterlace the input video ("yadif" means "yet another deinterlacing
filter"). filter").
The filter accepts parameters as a list of @var{key}=@var{value} This filter accepts the following options:
pairs, separated by ":". If the key of the first options is omitted,
the arguments are interpreted according to syntax
@var{mode}:@var{parity}:@var{deint}.
The description of the accepted parameters follows.
@table @option @table @option
@item mode @item mode
Specify the interlacing mode to adopt. Accept one of the following The interlacing mode to adopt, accepts one of the following values:
values:
@table @option @table @option
@item 0, send_frame @item 0, send_frame
...@@ -5694,8 +5690,8 @@ like @code{send_field} but skip spatial interlacing check ...@@ -5694,8 +5690,8 @@ like @code{send_field} but skip spatial interlacing check
Default value is @code{send_frame}. Default value is @code{send_frame}.
@item parity @item parity
Specify the picture field parity assumed for the input interlaced The picture field parity assumed for the input interlaced video, accepts one of
video. Accept one of the following values: the following values:
@table @option @table @option
@item 0, tff @item 0, tff
......
...@@ -714,6 +714,7 @@ int avfilter_init_filter(AVFilterContext *filter, const char *args, void *opaque ...@@ -714,6 +714,7 @@ int avfilter_init_filter(AVFilterContext *filter, const char *args, void *opaque
!strcmp(filter->filter->name, "unsharp" ) || !strcmp(filter->filter->name, "unsharp" ) ||
// !strcmp(filter->filter->name, "scale" ) || // !strcmp(filter->filter->name, "scale" ) ||
!strcmp(filter->filter->name, "select") || !strcmp(filter->filter->name, "select") ||
!strcmp(filter->filter->name, "yadif" ) ||
0 0
; ;
......
...@@ -344,32 +344,6 @@ static int request_frame(AVFilterLink *link) ...@@ -344,32 +344,6 @@ static int request_frame(AVFilterLink *link)
return 0; return 0;
} }
#define OFFSET(x) offsetof(YADIFContext, x)
#define FLAGS AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
#define CONST(name, help, val, unit) { name, help, 0, AV_OPT_TYPE_CONST, {.i64=val}, INT_MIN, INT_MAX, FLAGS, unit }
static const AVOption yadif_options[] = {
{ "mode", "specify the interlacing mode", OFFSET(mode), AV_OPT_TYPE_INT, {.i64=YADIF_MODE_SEND_FRAME}, 0, 3, FLAGS, "mode"},
CONST("send_frame", "send one frame for each frame", YADIF_MODE_SEND_FRAME, "mode"),
CONST("send_field", "send one frame for each field", YADIF_MODE_SEND_FIELD, "mode"),
CONST("send_frame_nospatial", "send one frame for each frame, but skip spatial interlacing check", YADIF_MODE_SEND_FRAME_NOSPATIAL, "mode"),
CONST("send_field_nospatial", "send one frame for each field, but skip spatial interlacing check", YADIF_MODE_SEND_FIELD_NOSPATIAL, "mode"),
{ "parity", "specify the assumed picture field parity", OFFSET(parity), AV_OPT_TYPE_INT, {.i64=YADIF_PARITY_AUTO}, -1, 1, FLAGS, "parity" },
CONST("tff", "assume top field first", YADIF_PARITY_TFF, "parity"),
CONST("bff", "assume bottom field first", YADIF_PARITY_BFF, "parity"),
CONST("auto", "auto detect parity", YADIF_PARITY_AUTO, "parity"),
{ "deint", "specify which frames to deinterlace", OFFSET(deint), AV_OPT_TYPE_INT, {.i64=YADIF_DEINT_ALL}, 0, 1, FLAGS, "deint" },
CONST("all", "deinterlace all frames", YADIF_DEINT_ALL, "deint"),
CONST("interlaced", "only deinterlace frames marked as interlaced", YADIF_DEINT_INTERLACED, "deint"),
{NULL},
};
AVFILTER_DEFINE_CLASS(yadif);
static av_cold void uninit(AVFilterContext *ctx) static av_cold void uninit(AVFilterContext *ctx)
{ {
YADIFContext *yadif = ctx->priv; YADIFContext *yadif = ctx->priv;
...@@ -420,16 +394,6 @@ static int query_formats(AVFilterContext *ctx) ...@@ -420,16 +394,6 @@ static int query_formats(AVFilterContext *ctx)
return 0; return 0;
} }
static av_cold int init(AVFilterContext *ctx, const char *args)
{
YADIFContext *yadif = ctx->priv;
av_log(ctx, AV_LOG_VERBOSE, "mode:%d parity:%d deint:%d\n",
yadif->mode, yadif->parity, yadif->deint);
return 0;
}
static int config_props(AVFilterLink *link) static int config_props(AVFilterLink *link)
{ {
AVFilterContext *ctx = link->src; AVFilterContext *ctx = link->src;
...@@ -463,6 +427,33 @@ static int config_props(AVFilterLink *link) ...@@ -463,6 +427,33 @@ static int config_props(AVFilterLink *link)
return 0; return 0;
} }
#define OFFSET(x) offsetof(YADIFContext, x)
#define FLAGS AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
#define CONST(name, help, val, unit) { name, help, 0, AV_OPT_TYPE_CONST, {.i64=val}, INT_MIN, INT_MAX, FLAGS, unit }
static const AVOption yadif_options[] = {
{ "mode", "specify the interlacing mode", OFFSET(mode), AV_OPT_TYPE_INT, {.i64=YADIF_MODE_SEND_FRAME}, 0, 3, FLAGS, "mode"},
CONST("send_frame", "send one frame for each frame", YADIF_MODE_SEND_FRAME, "mode"),
CONST("send_field", "send one frame for each field", YADIF_MODE_SEND_FIELD, "mode"),
CONST("send_frame_nospatial", "send one frame for each frame, but skip spatial interlacing check", YADIF_MODE_SEND_FRAME_NOSPATIAL, "mode"),
CONST("send_field_nospatial", "send one frame for each field, but skip spatial interlacing check", YADIF_MODE_SEND_FIELD_NOSPATIAL, "mode"),
{ "parity", "specify the assumed picture field parity", OFFSET(parity), AV_OPT_TYPE_INT, {.i64=YADIF_PARITY_AUTO}, -1, 1, FLAGS, "parity" },
CONST("tff", "assume top field first", YADIF_PARITY_TFF, "parity"),
CONST("bff", "assume bottom field first", YADIF_PARITY_BFF, "parity"),
CONST("auto", "auto detect parity", YADIF_PARITY_AUTO, "parity"),
{ "deint", "specify which frames to deinterlace", OFFSET(deint), AV_OPT_TYPE_INT, {.i64=YADIF_DEINT_ALL}, 0, 1, FLAGS, "deint" },
CONST("all", "deinterlace all frames", YADIF_DEINT_ALL, "deint"),
CONST("interlaced", "only deinterlace frames marked as interlaced", YADIF_DEINT_INTERLACED, "deint"),
{NULL},
};
AVFILTER_DEFINE_CLASS(yadif);
static const AVFilterPad avfilter_vf_yadif_inputs[] = { static const AVFilterPad avfilter_vf_yadif_inputs[] = {
{ {
.name = "default", .name = "default",
...@@ -482,20 +473,15 @@ static const AVFilterPad avfilter_vf_yadif_outputs[] = { ...@@ -482,20 +473,15 @@ static const AVFilterPad avfilter_vf_yadif_outputs[] = {
{ NULL } { NULL }
}; };
static const char *const shorthand[] = { "mode", "parity", "deint", NULL };
AVFilter avfilter_vf_yadif = { AVFilter avfilter_vf_yadif = {
.name = "yadif", .name = "yadif",
.description = NULL_IF_CONFIG_SMALL("Deinterlace the input image."), .description = NULL_IF_CONFIG_SMALL("Deinterlace the input image."),
.priv_size = sizeof(YADIFContext), .priv_size = sizeof(YADIFContext),
.init = init, .priv_class = &yadif_class,
.uninit = uninit, .uninit = uninit,
.query_formats = query_formats, .query_formats = query_formats,
.inputs = avfilter_vf_yadif_inputs, .inputs = avfilter_vf_yadif_inputs,
.outputs = avfilter_vf_yadif_outputs, .outputs = avfilter_vf_yadif_outputs,
.priv_class = &yadif_class,
.shorthand = shorthand,
}; };
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment