lavfi/setfield: add "progressive" option

Add "prog" parameter value, and deprecate numeric values.

Signed-off-by: Stefano Sabatini <stefasab@gmail.com>
This commit is contained in:
Tim Nicholson 2012-04-20 10:51:42 +01:00 committed by Stefano Sabatini
parent 9849515214
commit c97201dd29
3 changed files with 22 additions and 15 deletions

View File

@ -2534,19 +2534,21 @@ Force field for the output video frame.
The @code{setfield} filter marks the interlace type field for the
output frames. It does not change the input frame, but only sets the
corresponding property, which affects how the frame is treated by
followig filters (e.g. @code{fieldorder} or @code{yadif}).
following filters (e.g. @code{fieldorder} or @code{yadif}).
It accepts a parameter representing an integer or a string, which can
assume the following values:
It accepts a string parameter, which can assume the following values:
@table @samp
@item -1, auto
@item auto
Keep the same field property.
@item 0, bff
@item bff
Mark the frame as bottom-field-first.
@item 1, tff
@item tff
Mark the frame as top-field-first.
@item prog
Mark the frame as progressive.
@end table
@section setpts

View File

@ -30,7 +30,7 @@
#define LIBAVFILTER_VERSION_MAJOR 2
#define LIBAVFILTER_VERSION_MINOR 71
#define LIBAVFILTER_VERSION_MICRO 101
#define LIBAVFILTER_VERSION_MICRO 102
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
LIBAVFILTER_VERSION_MINOR, \

View File

@ -40,21 +40,24 @@ static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque)
if (sscanf(args, "%d%c", &setfield->top_field_first, &c) != 1) {
if (!strcmp("tff", args)) setfield->top_field_first = 1;
else if (!strcmp("bff", args)) setfield->top_field_first = 0;
else if (!strcmp("prog", args)) setfield->top_field_first = 2;
else if (!strcmp("auto", args)) setfield->top_field_first = -1;
else {
av_log(ctx, AV_LOG_ERROR, "Invalid argument '%s'\n", args);
return AVERROR(EINVAL);
}
} else {
if (setfield->top_field_first < -1 || setfield->top_field_first > 1) {
av_log(ctx, AV_LOG_ERROR,
"Provided integer value %d must be included between -1 and +1\n",
setfield->top_field_first);
return AVERROR(EINVAL);
}
av_log(ctx, AV_LOG_WARNING,
"Using -1/0/1 is deprecated, use auto/tff/bff/prog\n", args);
}
}
if (setfield->top_field_first < -1 || setfield->top_field_first > 1) {
av_log(ctx, AV_LOG_ERROR,
"Provided integer value %d must be included between -1 and +1\n",
setfield->top_field_first);
return AVERROR(EINVAL);
}
return 0;
}
@ -63,7 +66,9 @@ static void start_frame(AVFilterLink *inlink, AVFilterBufferRef *inpicref)
SetFieldContext *setfield = inlink->dst->priv;
AVFilterBufferRef *outpicref = avfilter_ref_buffer(inpicref, ~0);
if (setfield->top_field_first != -1) {
if (setfield->top_field_first == 2) {
outpicref->video->interlaced = 0;
} else if (setfield->top_field_first != -1) {
outpicref->video->interlaced = 1;
outpicref->video->top_field_first = setfield->top_field_first;
}