Merge commit '7536c671040f1f3ebc9f0d3b7831dac71436b775'
* commit '7536c671040f1f3ebc9f0d3b7831dac71436b775': vf_yadif: switch to an AVOptions-based system. Conflicts: doc/filters.texi libavfilter/vf_yadif.c libavfilter/yadif.h Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
ab6091f8e2
@ -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
|
|||||||
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
|
|||||||
!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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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[] = {
|
|||||||
{ 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,
|
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user