summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libavfilter/vf_hue.c27
1 files changed, 9 insertions, 18 deletions
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;