[FFmpeg-devel] [PATCH] lavfi/hue: add process_command callback
Stefano Sabatini
stefasab at gmail.com
Fri Aug 31 18:04:30 CEST 2012
On date Friday 2012-08-31 01:56:58 +0200, Jérémy Tran encoded:
> This allows dynamic reconfiguration of the filter.
> The callback uses some code that was in the init function. Hence this code
> has been moved in its own function.
> ---
> doc/filters.texi | 12 ++++++++++++
> libavfilter/vf_hue.c | 45 +++++++++++++++++++++++++++++++++++++++++----
> 2 files changed, 53 insertions(+), 4 deletions(-)
>
> diff --git a/doc/filters.texi b/doc/filters.texi
> index bef95f7..7ca0a25 100644
> --- a/doc/filters.texi
> +++ b/doc/filters.texi
> @@ -2313,6 +2313,18 @@ hue=PI/2:1
> @end example
> @end itemize
>
> + at subsection commands
> +
> +The filter supports the following command:
This filter...
> + at table @option
> + at item reinit
> +Modify the hue and/or the saturation of the input video.
> +The command accepts the same named options and syntax than when calling the
> +filter from the command-line.
> +
> +If a parameter is omitted, it is kept at its current value.
> + at end table
> +
> @section idet
>
> Interlaceing detect filter. This filter tries to detect if the input is
> diff --git a/libavfilter/vf_hue.c b/libavfilter/vf_hue.c
> index cf1fe5f..dd36d8e 100644
> --- a/libavfilter/vf_hue.c
> +++ b/libavfilter/vf_hue.c
> @@ -63,19 +63,19 @@ static const AVOption hue_options[] = {
>
> AVFILTER_DEFINE_CLASS(hue);
>
> -static av_cold int init(AVFilterContext *ctx, const char *args)
> +static inline int set_options(AVFilterContext *ctx, const char *args)
> {
> HueContext *hue = ctx->priv;
> int n, ret;
> char c1 = 0, c2 = 0;
> char *equal;
>
> - hue->class = &hue_class;
> - av_opt_set_defaults(hue);
> -
> if (args) {
> /* named options syntax */
> if (equal = strchr(args, '=')) {
> + hue->hue = -FLT_MAX;
> + hue->hue_deg = -FLT_MAX;
> +
> if ((ret = av_set_options_string(hue, args, "=", ":")) < 0)
> return ret;
> if (hue->hue != -FLT_MAX && hue->hue_deg != -FLT_MAX) {
> @@ -103,6 +103,20 @@ static av_cold int init(AVFilterContext *ctx, const char *args)
> }
> }
>
> + return 0;
> +}
> +
> +static av_cold int init(AVFilterContext *ctx, const char *args)
> +{
> + HueContext *hue = ctx->priv;
> + int ret;
> +
> + hue->class = &hue_class;
> + av_opt_set_defaults(hue);
> +
> + if ((ret = set_options(ctx, args)) < 0)
> + return ret;
> +
> if (hue->saturation == -FLT_MAX)
> hue->hue = SAT_DEFAULT_VAL;
> if (hue->hue == -FLT_MAX)
> @@ -223,6 +237,28 @@ static int draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir)
> return ff_draw_slice(inlink->dst->outputs[0], y, h, slice_dir);
> }
>
> +static int process_command(AVFilterContext *ctx, const char *cmd, const char *args,
> + char *res, int res_len, int flags)
> +{
> + HueContext *hue = ctx->priv;
> + int ret;
> +
> + if (!strcmp(cmd, "reinit")) {
> + if ((ret = set_options(ctx, args)) < 0)
> + return ret;
> +
> + if (hue->hue_deg != -FLT_MAX)
> + /* Convert angle from degrees to radians */
> + hue->hue = hue->hue_deg * M_PI / 180;
> +
> + hue->hue_sin = rint(sin(hue->hue) * (1 << 16) * hue->saturation);
> + hue->hue_cos = rint(cos(hue->hue) * (1 << 16) * hue->saturation);
I suspect this could be factorized, but patch looks OK, will push it
soon.
Thanks.
--
FFmpeg = Forgiving and Fabulous Mystic Picky Enhanced Geisha
More information about the ffmpeg-devel
mailing list