mirror of https://git.ffmpeg.org/ffmpeg.git
vf_(no)format: switch to an AVOptions-based system.
This commit is contained in:
parent
0af7fe1f95
commit
e67a87eac8
|
@ -1067,16 +1067,22 @@ Convert the input video to one of the specified pixel formats.
|
|||
Libavfilter will try to pick one that is supported for the input to
|
||||
the next filter.
|
||||
|
||||
The filter accepts a list of pixel format names, separated by ":",
|
||||
for example "yuv420p:monow:rgb24".
|
||||
This filter accepts the following parameters:
|
||||
@table @option
|
||||
|
||||
@item pix_fmts
|
||||
A '|'-separated list of pixel format names, for example
|
||||
"pix_fmts=yuv420p|monow|rgb24".
|
||||
|
||||
@end table
|
||||
|
||||
Some examples follow:
|
||||
@example
|
||||
# convert the input video to the format "yuv420p"
|
||||
format=yuv420p
|
||||
format=pix_fmts=yuv420p
|
||||
|
||||
# convert the input video to any of the formats in the list
|
||||
format=yuv420p:yuv444p:yuv410p
|
||||
format=pix_fmts=yuv420p|yuv444p|yuv410p
|
||||
@end example
|
||||
|
||||
@section fps
|
||||
|
@ -1336,17 +1342,23 @@ alpha component (if available). The default value in input is 0.
|
|||
Force libavfilter not to use any of the specified pixel formats for the
|
||||
input to the next filter.
|
||||
|
||||
The filter accepts a list of pixel format names, separated by ":",
|
||||
for example "yuv420p:monow:rgb24".
|
||||
This filter accepts the following parameters:
|
||||
@table @option
|
||||
|
||||
@item pix_fmts
|
||||
A '|'-separated list of pixel format names, for example
|
||||
"pix_fmts=yuv420p|monow|rgb24".
|
||||
|
||||
@end table
|
||||
|
||||
Some examples follow:
|
||||
@example
|
||||
# force libavfilter to use a format different from "yuv420p" for the
|
||||
# input to the vflip filter
|
||||
noformat=yuv420p,vflip
|
||||
noformat=pix_fmts=yuv420p,vflip
|
||||
|
||||
# convert the input video to any of the formats not contained in the list
|
||||
noformat=yuv420p:yuv444p:yuv410p
|
||||
noformat=yuv420p|yuv444p|yuv410p
|
||||
@end example
|
||||
|
||||
@section null
|
||||
|
|
|
@ -486,6 +486,33 @@ int avfilter_init_filter(AVFilterContext *filter, const char *args, void *opaque
|
|||
ret = av_dict_parse_string(&options, args, "=", ":", 0);
|
||||
if (ret < 0)
|
||||
goto fail;
|
||||
#if FF_API_OLD_FILTER_OPTS
|
||||
} else if (!strcmp(filter->filter->name, "format") ||
|
||||
!strcmp(filter->filter->name, "noformat")) {
|
||||
/* a hack for compatibility with the old syntax
|
||||
* replace colons with |s */
|
||||
char *copy = av_strdup(args);
|
||||
char *p = copy;
|
||||
|
||||
if (!copy) {
|
||||
ret = AVERROR(ENOMEM);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (strchr(copy, ':')) {
|
||||
av_log(filter, AV_LOG_WARNING, "This syntax is deprecated. Use "
|
||||
"'|' to separate the list items.\n");
|
||||
}
|
||||
|
||||
while ((p = strchr(p, ':')))
|
||||
*p++ = '|';
|
||||
|
||||
ret = process_unnamed_options(filter, &options, copy);
|
||||
av_freep(©);
|
||||
|
||||
if (ret < 0)
|
||||
goto fail;
|
||||
#endif
|
||||
} else {
|
||||
ret = process_unnamed_options(filter, &options, args);
|
||||
if (ret < 0)
|
||||
|
|
|
@ -28,12 +28,16 @@
|
|||
#include "libavutil/internal.h"
|
||||
#include "libavutil/mem.h"
|
||||
#include "libavutil/pixdesc.h"
|
||||
#include "libavutil/opt.h"
|
||||
|
||||
#include "avfilter.h"
|
||||
#include "formats.h"
|
||||
#include "internal.h"
|
||||
#include "video.h"
|
||||
|
||||
typedef struct {
|
||||
const AVClass *class;
|
||||
char *pix_fmts;
|
||||
/**
|
||||
* List of flags telling if a given image format has been listed
|
||||
* as argument to the filter.
|
||||
|
@ -52,8 +56,8 @@ static av_cold int init(AVFilterContext *ctx, const char *args)
|
|||
enum AVPixelFormat pix_fmt;
|
||||
|
||||
/* parse the list of formats */
|
||||
for (cur = args; cur; cur = sep ? sep+1 : NULL) {
|
||||
if (!(sep = strchr(cur, ':')))
|
||||
for (cur = format->pix_fmts; cur; cur = sep ? sep + 1 : NULL) {
|
||||
if (!(sep = strchr(cur, '|')))
|
||||
pix_fmt_name_len = strlen(cur);
|
||||
else
|
||||
pix_fmt_name_len = sep - cur;
|
||||
|
@ -92,6 +96,12 @@ static AVFilterFormats *make_format_list(FormatContext *format, int flag)
|
|||
return formats;
|
||||
}
|
||||
|
||||
#define OFFSET(x) offsetof(FormatContext, x)
|
||||
static const AVOption options[] = {
|
||||
{ "pix_fmts", "A '|'-separated list of pixel formats", OFFSET(pix_fmts), AV_OPT_TYPE_STRING, .flags = AV_OPT_FLAG_VIDEO_PARAM },
|
||||
{ NULL },
|
||||
};
|
||||
|
||||
#if CONFIG_FORMAT_FILTER
|
||||
static int query_formats_format(AVFilterContext *ctx)
|
||||
{
|
||||
|
@ -99,6 +109,13 @@ static int query_formats_format(AVFilterContext *ctx)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static const AVClass format_class = {
|
||||
.class_name = "format",
|
||||
.item_name = av_default_item_name,
|
||||
.option = options,
|
||||
.version = LIBAVUTIL_VERSION_INT,
|
||||
};
|
||||
|
||||
static const AVFilterPad avfilter_vf_format_inputs[] = {
|
||||
{
|
||||
.name = "default",
|
||||
|
@ -125,6 +142,7 @@ AVFilter avfilter_vf_format = {
|
|||
.query_formats = query_formats_format,
|
||||
|
||||
.priv_size = sizeof(FormatContext),
|
||||
.priv_class = &format_class,
|
||||
|
||||
.inputs = avfilter_vf_format_inputs,
|
||||
.outputs = avfilter_vf_format_outputs,
|
||||
|
@ -138,6 +156,13 @@ static int query_formats_noformat(AVFilterContext *ctx)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static const AVClass noformat_class = {
|
||||
.class_name = "noformat",
|
||||
.item_name = av_default_item_name,
|
||||
.option = options,
|
||||
.version = LIBAVUTIL_VERSION_INT,
|
||||
};
|
||||
|
||||
static const AVFilterPad avfilter_vf_noformat_inputs[] = {
|
||||
{
|
||||
.name = "default",
|
||||
|
@ -164,6 +189,7 @@ AVFilter avfilter_vf_noformat = {
|
|||
.query_formats = query_formats_noformat,
|
||||
|
||||
.priv_size = sizeof(FormatContext),
|
||||
.priv_class = &noformat_class,
|
||||
|
||||
.inputs = avfilter_vf_noformat_inputs,
|
||||
.outputs = avfilter_vf_noformat_outputs,
|
||||
|
|
Loading…
Reference in New Issue