diff --git a/libavfilter/vf_hue.c b/libavfilter/vf_hue.c index e02a216b90..3048a596ca 100644 --- a/libavfilter/vf_hue.c +++ b/libavfilter/vf_hue.c @@ -107,8 +107,8 @@ static inline void compute_sin_and_cos(HueContext *hue) hue->hue_cos = rint(cos(hue->hue) * (1 << 16) * hue->saturation); } -#define PARSE_EXPRESSION(attr, name) \ - do { \ +#define SET_EXPRESSION(attr, name) do { \ + if (hue->attr##_expr) { \ if ((ret = av_expr_parse(&hue->attr##_pexpr, hue->attr##_expr, var_names, \ NULL, NULL, NULL, NULL, 0, ctx)) < 0) { \ av_log(ctx, AV_LOG_ERROR, \ @@ -122,7 +122,10 @@ static inline void compute_sin_and_cos(HueContext *hue) av_expr_free(old_##attr##_pexpr); \ old_##attr##_pexpr = NULL; \ } \ - } while (0) + } else { \ + hue->attr##_expr = old_##attr##_expr; \ + } \ +} while (0) static inline int set_options(AVFilterContext *ctx, const char *args) { @@ -159,21 +162,9 @@ static inline int set_options(AVFilterContext *ctx, const char *args) return AVERROR(EINVAL); } - /* - * if both 'H' and 'h' options have not been specified, restore the - * old values - */ - if (!hue->hue_expr && !hue->hue_deg_expr) { - hue->hue_expr = old_hue_expr; - hue->hue_deg_expr = old_hue_deg_expr; - } - - if (hue->hue_deg_expr) - PARSE_EXPRESSION(hue_deg, h); - if (hue->hue_expr) - PARSE_EXPRESSION(hue, H); - if (hue->saturation_expr) - PARSE_EXPRESSION(saturation, s); + SET_EXPRESSION(hue_deg, h); + SET_EXPRESSION(hue, H); + SET_EXPRESSION(saturation, s); hue->flat_syntax = 0;