[FFmpeg-devel] [PATCH] lavfi: Add support to process_command in vf_eq.c

Stefano Sabatini stefasab at gmail.com
Sat Jan 31 11:25:00 CET 2015


On date Friday 2015-01-30 23:17:33 +0530, Arwa Arif encoded:
> I have tried to add process_command in vf_eq.c. I have attached the patch.

> From 1d65e493a8eb247d86b0db324cb740579662706d Mon Sep 17 00:00:00 2001
> From: Arwa Arif <arwaarif1994 at gmail.com>
> Date: Fri, 30 Jan 2015 23:06:50 +0530
> Subject: [PATCH] Add support to process_command in vf_eq.c
> 
> ---
>  libavfilter/vf_eq.c |   53 ++++++++++++++++++++++++++++++++++++++-------------
>  1 file changed, 40 insertions(+), 13 deletions(-)

Missing doc updates.

> 
> diff --git a/libavfilter/vf_eq.c b/libavfilter/vf_eq.c
> index ad2a37e..5899abb 100644
> --- a/libavfilter/vf_eq.c
> +++ b/libavfilter/vf_eq.c
> @@ -27,11 +27,6 @@
>   * very simple video equalizer
>   */
>  
> -/**
> - * TODO:
> - * - Add support to process_command
> - */
> -
>  #include "libavfilter/internal.h"
>  #include "libavutil/common.h"
>  #include "libavutil/imgutils.h"
> @@ -217,6 +212,37 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
>      av_frame_free(&in);
>      return ff_filter_frame(outlink, out);
>  }
> +
> +static int process_command(AVFilterContext *ctx, const char *cmd, const char *args,
> +                           char *res, int res_len, int flags)
> +{
> +    EQContext *eq = ctx->priv;
> +
> +    if (!strcmp(cmd, "contrast"))

> +        eq->contrast     = av_clipf(strtod(args, NULL), -2.0,  2.0);

All this parameters are set through the av_opt_ interface. Try to use
it, since otherwise range checks and parsing is inconsistent. In
particular, the parsing performed by av_opt_ may be different from
strtod(). Also you want to want the user in case of out-of-range values.

> +    if (!strcmp(cmd, "brightness"))
> +        eq->brightness   = av_clipf(strtod(args, NULL), -1.0,  1.0);
> +    if (!strcmp(cmd, "saturation"))
> +        eq->saturation   = av_clipf(strtod(args, NULL),  0.0,  3.0);
> +    if (!strcmp(cmd, "gamma"))
> +        eq->gamma        = av_clipf(strtod(args, NULL),  0.1, 10.0);
> +    if (!strcmp(cmd, "gamma_r"))
> +        eq->gamma_r      = av_clipf(strtod(args, NULL),  0.1, 10.0);
> +    if (!strcmp(cmd, "gamma_g"))
> +        eq->gamma_g      = av_clipf(strtod(args, NULL),  0.1, 10.0);
> +    if (!strcmp(cmd, "gamma_b"))
> +        eq->gamma_b      = av_clipf(strtod(args, NULL),  0.1, 10.0);
> +    if (!strcmp(cmd, "gamma_weight"))
> +        eq->gamma_weight = av_clipf(strtod(args, NULL),  0.0,  1.0);
> +
> +    set_gamma(eq);
> +    set_contrast(eq);
> +    set_brightness(eq);
> +    set_saturation(eq);
> +
> +    return 0;
> +}

if (!strcmp(cmd, "contrast) {
   set contrast
   set_contrast(eq);
} else if (...)

} else...

This wauy you don't need to set the other parameters if they are not
changed.


Also it should return AVERROR(ENOSYS) in case of unrecognized command.  

> +
>  static const AVFilterPad eq_inputs[] = {
>      {
>          .name = "default",
> @@ -260,12 +286,13 @@ static const AVOption eq_options[] = {
>  AVFILTER_DEFINE_CLASS(eq);
>  
>  AVFilter ff_vf_eq = {
> -    .name          = "eq",
> -    .description   = NULL_IF_CONFIG_SMALL("Adjust brightness, contrast, gamma, and saturation."),
> -    .priv_size     = sizeof(EQContext),
> -    .priv_class    = &eq_class,
> -    .inputs        = eq_inputs,
> -    .outputs       = eq_outputs,
> -    .query_formats = query_formats,
> -    .init          = initialize,

> +    .name            = "eq",
> +    .description     = NULL_IF_CONFIG_SMALL("Adjust brightness, contrast, gamma, and saturation."),
> +    .priv_size       = sizeof(EQContext),
> +    .priv_class      = &eq_class,
> +    .inputs          = eq_inputs,
> +    .outputs         = eq_outputs,
> +    .process_command = process_command,
> +    .query_formats   = query_formats,
> +    .init            = initialize,

avoid cosmetic changes, you can vertically realign in a separate
(cosmetical) commit.
-- 
FFmpeg = Fostering Faithless Mournful Puristic Ecletic Generator


More information about the ffmpeg-devel mailing list