提交 34610e11 编写于 作者: C Clément Bœsch

lavfi/curves: switch to an AVOptions-based system.

上级 8da1f1f2
...@@ -2369,30 +2369,15 @@ If there is no key point defined in @code{x=0}, the filter will automatically ...@@ -2369,30 +2369,15 @@ If there is no key point defined in @code{x=0}, the filter will automatically
insert a @var{(0;0)} point. In the same way, if there is no key point defined insert a @var{(0;0)} point. In the same way, if there is no key point defined
in @code{x=1}, the filter will automatically insert a @var{(1;1)} point. in @code{x=1}, the filter will automatically insert a @var{(1;1)} point.
The filter accepts parameters as a list of @var{key}=@var{value} The filter accepts the following options:
pairs, separated by ":". If the key of the first options is omitted,
the arguments are interpreted according to the syntax
curves[=@var{preset}].
A description of the accepted parameters follows.
@table @option @table @option
@item red, r
Set the key points for the red component.
@item green, g
Set the key points for the green component.
@item blue, b
Set the key points for the blue component.
@item all
Set the key points for all components.
Can be used in addition to the other key points component
options. In this case, the unset component(s) will fallback on this
@option{all} setting.
@item preset @item preset
Select one of the available color presets. This option can not be used in Select one of the available color presets. This option can not be used in
addition to the @option{r}, @option{g}, @option{b} parameters. addition to the @option{r}, @option{g}, @option{b} parameters.
Available presets are: Available presets are:
@table @samp @table @samp
@item none
@item color_negative @item color_negative
@item cross_process @item cross_process
@item darker @item darker
...@@ -2404,7 +2389,18 @@ Available presets are: ...@@ -2404,7 +2389,18 @@ Available presets are:
@item strong_contrast @item strong_contrast
@item vintage @item vintage
@end table @end table
Default is unset. Default is @code{none}.
@item red, r
Set the key points for the red component.
@item green, g
Set the key points for the green component.
@item blue, b
Set the key points for the blue component.
@item all
Set the key points for all components.
Can be used in addition to the other key points component
options. In this case, the unset component(s) will fallback on this
@option{all} setting.
@end table @end table
To avoid some filtergraph syntax conflicts, each key points list need to be To avoid some filtergraph syntax conflicts, each key points list need to be
......
...@@ -662,6 +662,7 @@ int avfilter_init_filter(AVFilterContext *filter, const char *args, void *opaque ...@@ -662,6 +662,7 @@ int avfilter_init_filter(AVFilterContext *filter, const char *args, void *opaque
!strcmp(filter->filter->name, "colormatrix") || !strcmp(filter->filter->name, "colormatrix") ||
!strcmp(filter->filter->name, "crop" ) || !strcmp(filter->filter->name, "crop" ) ||
!strcmp(filter->filter->name, "cropdetect") || !strcmp(filter->filter->name, "cropdetect") ||
!strcmp(filter->filter->name, "curves" ) ||
!strcmp(filter->filter->name, "delogo" ) || !strcmp(filter->filter->name, "delogo" ) ||
!strcmp(filter->filter->name, "drawbox" ) || !strcmp(filter->filter->name, "drawbox" ) ||
!strcmp(filter->filter->name, "drawtext" ) || !strcmp(filter->filter->name, "drawtext" ) ||
......
...@@ -59,14 +59,8 @@ typedef struct { ...@@ -59,14 +59,8 @@ typedef struct {
#define OFFSET(x) offsetof(CurvesContext, x) #define OFFSET(x) offsetof(CurvesContext, x)
#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM #define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
static const AVOption curves_options[] = { static const AVOption curves_options[] = {
{ "red", "set red points coordinates", OFFSET(comp_points_str[0]), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS },
{ "r", "set red points coordinates", OFFSET(comp_points_str[0]), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS },
{ "green", "set green points coordinates", OFFSET(comp_points_str[1]), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS },
{ "g", "set green points coordinates", OFFSET(comp_points_str[1]), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS },
{ "blue", "set blue points coordinates", OFFSET(comp_points_str[2]), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS },
{ "b", "set blue points coordinates", OFFSET(comp_points_str[2]), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS },
{ "all", "set points coordinates for all components", OFFSET(comp_points_str_all),AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS },
{ "preset", "select a color curves preset", OFFSET(preset), AV_OPT_TYPE_INT, {.i64=PRESET_NONE}, PRESET_NONE, NB_PRESETS-1, FLAGS, "preset_name" }, { "preset", "select a color curves preset", OFFSET(preset), AV_OPT_TYPE_INT, {.i64=PRESET_NONE}, PRESET_NONE, NB_PRESETS-1, FLAGS, "preset_name" },
{ "none", NULL, 0, AV_OPT_TYPE_CONST, {.i64=PRESET_NONE}, INT_MIN, INT_MAX, FLAGS, "preset_name" },
{ "color_negative", NULL, 0, AV_OPT_TYPE_CONST, {.i64=PRESET_COLOR_NEGATIVE}, INT_MIN, INT_MAX, FLAGS, "preset_name" }, { "color_negative", NULL, 0, AV_OPT_TYPE_CONST, {.i64=PRESET_COLOR_NEGATIVE}, INT_MIN, INT_MAX, FLAGS, "preset_name" },
{ "cross_process", NULL, 0, AV_OPT_TYPE_CONST, {.i64=PRESET_CROSS_PROCESS}, INT_MIN, INT_MAX, FLAGS, "preset_name" }, { "cross_process", NULL, 0, AV_OPT_TYPE_CONST, {.i64=PRESET_CROSS_PROCESS}, INT_MIN, INT_MAX, FLAGS, "preset_name" },
{ "darker", NULL, 0, AV_OPT_TYPE_CONST, {.i64=PRESET_DARKER}, INT_MIN, INT_MAX, FLAGS, "preset_name" }, { "darker", NULL, 0, AV_OPT_TYPE_CONST, {.i64=PRESET_DARKER}, INT_MIN, INT_MAX, FLAGS, "preset_name" },
...@@ -77,6 +71,13 @@ static const AVOption curves_options[] = { ...@@ -77,6 +71,13 @@ static const AVOption curves_options[] = {
{ "negative", NULL, 0, AV_OPT_TYPE_CONST, {.i64=PRESET_NEGATIVE}, INT_MIN, INT_MAX, FLAGS, "preset_name" }, { "negative", NULL, 0, AV_OPT_TYPE_CONST, {.i64=PRESET_NEGATIVE}, INT_MIN, INT_MAX, FLAGS, "preset_name" },
{ "strong_contrast", NULL, 0, AV_OPT_TYPE_CONST, {.i64=PRESET_STRONG_CONTRAST}, INT_MIN, INT_MAX, FLAGS, "preset_name" }, { "strong_contrast", NULL, 0, AV_OPT_TYPE_CONST, {.i64=PRESET_STRONG_CONTRAST}, INT_MIN, INT_MAX, FLAGS, "preset_name" },
{ "vintage", NULL, 0, AV_OPT_TYPE_CONST, {.i64=PRESET_VINTAGE}, INT_MIN, INT_MAX, FLAGS, "preset_name" }, { "vintage", NULL, 0, AV_OPT_TYPE_CONST, {.i64=PRESET_VINTAGE}, INT_MIN, INT_MAX, FLAGS, "preset_name" },
{ "red", "set red points coordinates", OFFSET(comp_points_str[0]), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS },
{ "r", "set red points coordinates", OFFSET(comp_points_str[0]), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS },
{ "green", "set green points coordinates", OFFSET(comp_points_str[1]), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS },
{ "g", "set green points coordinates", OFFSET(comp_points_str[1]), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS },
{ "blue", "set blue points coordinates", OFFSET(comp_points_str[2]), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS },
{ "b", "set blue points coordinates", OFFSET(comp_points_str[2]), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS },
{ "all", "set points coordinates for all components", OFFSET(comp_points_str_all),AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS },
{ NULL } { NULL }
}; };
...@@ -447,8 +448,6 @@ static const AVFilterPad curves_outputs[] = { ...@@ -447,8 +448,6 @@ static const AVFilterPad curves_outputs[] = {
{ NULL } { NULL }
}; };
static const char *const shorthand[] = { "preset", NULL };
AVFilter avfilter_vf_curves = { AVFilter avfilter_vf_curves = {
.name = "curves", .name = "curves",
.description = NULL_IF_CONFIG_SMALL("Adjust components curves."), .description = NULL_IF_CONFIG_SMALL("Adjust components curves."),
...@@ -458,5 +457,4 @@ AVFilter avfilter_vf_curves = { ...@@ -458,5 +457,4 @@ AVFilter avfilter_vf_curves = {
.inputs = curves_inputs, .inputs = curves_inputs,
.outputs = curves_outputs, .outputs = curves_outputs,
.priv_class = &curves_class, .priv_class = &curves_class,
.shorthand = shorthand,
}; };
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册