You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-10 06:10:52 +02:00
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:
committed by
Stefano Sabatini
parent
9849515214
commit
c97201dd29
@@ -2534,19 +2534,21 @@ Force field for the output video frame.
|
|||||||
The @code{setfield} filter marks the interlace type field for the
|
The @code{setfield} filter marks the interlace type field for the
|
||||||
output frames. It does not change the input frame, but only sets the
|
output frames. It does not change the input frame, but only sets the
|
||||||
corresponding property, which affects how the frame is treated by
|
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
|
It accepts a string parameter, which can assume the following values:
|
||||||
assume the following values:
|
|
||||||
@table @samp
|
@table @samp
|
||||||
@item -1, auto
|
@item auto
|
||||||
Keep the same field property.
|
Keep the same field property.
|
||||||
|
|
||||||
@item 0, bff
|
@item bff
|
||||||
Mark the frame as bottom-field-first.
|
Mark the frame as bottom-field-first.
|
||||||
|
|
||||||
@item 1, tff
|
@item tff
|
||||||
Mark the frame as top-field-first.
|
Mark the frame as top-field-first.
|
||||||
|
|
||||||
|
@item prog
|
||||||
|
Mark the frame as progressive.
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
@section setpts
|
@section setpts
|
||||||
|
@@ -30,7 +30,7 @@
|
|||||||
|
|
||||||
#define LIBAVFILTER_VERSION_MAJOR 2
|
#define LIBAVFILTER_VERSION_MAJOR 2
|
||||||
#define LIBAVFILTER_VERSION_MINOR 71
|
#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, \
|
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
|
||||||
LIBAVFILTER_VERSION_MINOR, \
|
LIBAVFILTER_VERSION_MINOR, \
|
||||||
|
@@ -40,20 +40,23 @@ static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque)
|
|||||||
if (sscanf(args, "%d%c", &setfield->top_field_first, &c) != 1) {
|
if (sscanf(args, "%d%c", &setfield->top_field_first, &c) != 1) {
|
||||||
if (!strcmp("tff", args)) setfield->top_field_first = 1;
|
if (!strcmp("tff", args)) setfield->top_field_first = 1;
|
||||||
else if (!strcmp("bff", args)) setfield->top_field_first = 0;
|
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 if (!strcmp("auto", args)) setfield->top_field_first = -1;
|
||||||
else {
|
else {
|
||||||
av_log(ctx, AV_LOG_ERROR, "Invalid argument '%s'\n", args);
|
av_log(ctx, AV_LOG_ERROR, "Invalid argument '%s'\n", args);
|
||||||
return AVERROR(EINVAL);
|
return AVERROR(EINVAL);
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
}
|
|
||||||
|
|
||||||
if (setfield->top_field_first < -1 || setfield->top_field_first > 1) {
|
if (setfield->top_field_first < -1 || setfield->top_field_first > 1) {
|
||||||
av_log(ctx, AV_LOG_ERROR,
|
av_log(ctx, AV_LOG_ERROR,
|
||||||
"Provided integer value %d must be included between -1 and +1\n",
|
"Provided integer value %d must be included between -1 and +1\n",
|
||||||
setfield->top_field_first);
|
setfield->top_field_first);
|
||||||
return AVERROR(EINVAL);
|
return AVERROR(EINVAL);
|
||||||
}
|
}
|
||||||
|
av_log(ctx, AV_LOG_WARNING,
|
||||||
|
"Using -1/0/1 is deprecated, use auto/tff/bff/prog\n", args);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -63,7 +66,9 @@ static void start_frame(AVFilterLink *inlink, AVFilterBufferRef *inpicref)
|
|||||||
SetFieldContext *setfield = inlink->dst->priv;
|
SetFieldContext *setfield = inlink->dst->priv;
|
||||||
AVFilterBufferRef *outpicref = avfilter_ref_buffer(inpicref, ~0);
|
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->interlaced = 1;
|
||||||
outpicref->video->top_field_first = setfield->top_field_first;
|
outpicref->video->top_field_first = setfield->top_field_first;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user