libhb: Initial implementation of Chroma Smooth filter.
authorBradley Sepos <bradley@bradleysepos.com>
Thu, 7 Mar 2019 12:55:15 +0000 (07:55 -0500)
committerBradley Sepos <bradley@bradleysepos.com>
Thu, 28 Mar 2019 15:57:37 +0000 (11:57 -0400)
12 files changed:
libhb/chroma_smooth.c [new file with mode: 0644]
libhb/common.c
libhb/common.h
libhb/internal.h
libhb/param.c
libhb/preset.c
libhb/preset_builtin.h
preset/preset_builtin.json
preset/preset_builtin.list
preset/preset_cli_default.json
preset/preset_template.json
test/test.c

diff --git a/libhb/chroma_smooth.c b/libhb/chroma_smooth.c
new file mode 100644 (file)
index 0000000..e27ecaa
--- /dev/null
@@ -0,0 +1,370 @@
+/* chroma_smooth.c
+
+   Copyright (c) 2002 Rémi Guyomarch <rguyom at pobox.com>
+   Copyright (c) 2003-2019 HandBrake Team
+   This file is part of the HandBrake source code
+   Homepage: <http://handbrake.fr/>.
+   It may be used under the terms of the GNU General Public License v2.
+   For full terms see the file COPYING file or visit http://www.gnu.org/licenses/gpl-2.0.html
+ */
+
+#include "hb.h"
+
+#define CHROMA_SMOOTH_STRENGTH_DEFAULT 0.25
+#define CHROMA_SMOOTH_SIZE_DEFAULT 7
+#define CHROMA_SMOOTH_SIZE_MIN 3
+#define CHROMA_SMOOTH_SIZE_MAX 63
+
+typedef struct
+{
+    int        pix_fmt;   // source pixel format
+    int        width;     // source video width
+    double     strength;  // strength
+    int        size;      // pixel context region width (must be odd)
+
+    int        steps;
+    int        amount;
+    int        scalebits;
+    int32_t    halfscale;
+} chroma_smooth_plane_context_t;
+
+typedef struct
+{
+    uint32_t * SC[CHROMA_SMOOTH_SIZE_MAX - 1];
+} chroma_smooth_thread_context_t;
+
+typedef chroma_smooth_thread_context_t chroma_smooth_thread_context3_t[3];
+
+struct hb_filter_private_s
+{
+    chroma_smooth_plane_context_t     plane_ctx[3];
+    chroma_smooth_thread_context3_t * thread_ctx;
+    int                               threads;
+};
+
+static int chroma_smooth_init(hb_filter_object_t *filter,
+                              hb_filter_init_t   *init);
+
+static int chroma_smooth_init_thread(hb_filter_object_t *filter, int threads);
+
+static int chroma_smooth_work(hb_filter_object_t *filter,
+                              hb_buffer_t ** buf_in,
+                              hb_buffer_t ** buf_out);
+static int chroma_smooth_work_thread(hb_filter_object_t *filter,
+                                     hb_buffer_t ** buf_in,
+                                     hb_buffer_t ** buf_out, int thread);
+
+static void chroma_smooth_close(hb_filter_object_t *filter);
+
+static const char chroma_smooth_template[] =
+    "cb-strength=^"HB_FLOAT_REG"$:cb-size=^"HB_INT_REG"$:"
+    "cr-strength=^"HB_FLOAT_REG"$:cr-size=^"HB_INT_REG"$";
+
+hb_filter_object_t hb_filter_chroma_smooth =
+{
+    .id                = HB_FILTER_CHROMA_SMOOTH,
+    .enforce_order     = 1,
+    .name              = "Chroma Smooth",
+    .settings          = NULL,
+    .init              = chroma_smooth_init,
+    .init_thread       = chroma_smooth_init_thread,
+    .work              = chroma_smooth_work,
+    .work_thread       = chroma_smooth_work_thread,
+    .close             = chroma_smooth_close,
+    .settings_template = chroma_smooth_template,
+};
+
+static void luma_copy(const uint8_t *src,
+                      uint8_t *dst,
+                      const int width,
+                      const int height,
+                      const int stride,
+                      chroma_smooth_plane_context_t * ctx,
+                      chroma_smooth_thread_context_t * tctx)
+{
+    for (int y = 0; y < height; y++)
+    {
+        memcpy(dst + y * stride, src + y * stride, stride);
+    }
+}
+
+static void chroma_smooth(const uint8_t *src,
+                          uint8_t *dst,
+                          const int width,
+                          const int height,
+                          const int stride,
+                          chroma_smooth_plane_context_t * ctx,
+                          chroma_smooth_thread_context_t * tctx)
+{
+    uint32_t **SC = tctx->SC;
+    uint32_t SR[CHROMA_SMOOTH_SIZE_MAX - 1],
+             Tmp1,
+             Tmp2;
+    const uint8_t *src2 = src; // avoid gcc warning
+    int32_t res;
+    int x, y, z;
+    int amount        = ctx->amount;
+    int steps         = ctx->steps;
+    int scalebits     = ctx->scalebits;
+    int32_t halfscale = ctx->halfscale;
+
+    if (!amount)
+    {
+        if (src != dst)
+        {
+            memcpy(dst, src, stride*height);
+        }
+
+        return;
+    }
+
+    for (y = 0; y < 2 * steps; y++)
+    {
+        memset(SC[y], 0, sizeof(SC[y][0]) * (width + 2 * steps));
+    }
+
+    for (y = -steps; y < height + steps; y++)
+    {
+        if (y < height)
+        {
+            src2 = src;
+        }
+
+        memset(SR, 0, sizeof(SR[0]) * (2 * steps - 1));
+
+        for (x = -steps; x < width + steps; x++)
+        {
+            Tmp1 = x <= 0 ? src2[0] : x >= width ? src2[width - 1] : src2[x];
+
+            for (z = 0; z < steps * 2; z += 2)
+            {
+                Tmp2 = SR[z + 0] + Tmp1; SR[z + 0] = Tmp1;
+                Tmp1 = SR[z + 1] + Tmp2; SR[z + 1] = Tmp2;
+            }
+
+            for (z = 0; z < steps * 2; z += 2)
+            {
+                Tmp2 = SC[z + 0][x + steps] + Tmp1; SC[z + 0][x + steps] = Tmp1;
+                Tmp1 = SC[z + 1][x + steps] + Tmp2; SC[z + 1][x + steps] = Tmp2;
+            }
+
+            if (x >= steps && y >= steps)
+            {
+                const uint8_t * srx = src - steps * stride + x - steps;
+                uint8_t       * dsx = dst - steps * stride + x - steps;
+
+                //res = (int32_t)*srx + ((((int32_t)*srx -
+                //     (int32_t)((Tmp1 + halfscale) >> scalebits)) * amount) >> 16);
+                res = (int32_t)*srx - ((((int32_t)*srx -
+                     (int32_t)((Tmp1 + halfscale) >> scalebits)) * amount) >> 16);
+                *dsx = res > 255 ? 255 : res < 0 ? 0 : (uint8_t)res;
+            }
+        }
+
+        if (y >= 0)
+        {
+            dst += stride;
+            src += stride;
+        }
+    }
+}
+
+static int chroma_smooth_init(hb_filter_object_t *filter,
+                              hb_filter_init_t   *init)
+{
+    filter->private_data = calloc(sizeof(struct hb_filter_private_s), 1);
+    if (filter->private_data == NULL)
+    {
+        hb_error("Chroma Smooth calloc failed");
+        return -1;
+    }
+    hb_filter_private_t * pv = filter->private_data;
+
+    // Mark parameters unset
+    for (int c = 0; c < 3; c++)
+    {
+        pv->plane_ctx[c].strength = -1;
+        pv->plane_ctx[c].size     = -1;
+    }
+
+    // Read user parameters
+    if (filter->settings != NULL)
+    {
+        hb_dict_t * dict = filter->settings;
+        hb_dict_extract_double(&pv->plane_ctx[1].strength, dict, "cb-strength");
+        hb_dict_extract_int(&pv->plane_ctx[1].size,        dict, "cb-size");
+
+        hb_dict_extract_double(&pv->plane_ctx[2].strength, dict, "cr-strength");
+        hb_dict_extract_int(&pv->plane_ctx[2].size,        dict, "cr-size");
+    }
+
+    // Cascade values
+    // Cr not set; inherit Cb. Cb not set; defaults.
+    for (int c = 2; c < 3; c++)
+    {
+        chroma_smooth_plane_context_t * prev_ctx = &pv->plane_ctx[c - 1];
+        chroma_smooth_plane_context_t * ctx      = &pv->plane_ctx[c];
+
+        if (ctx->strength == -1) ctx->strength = prev_ctx->strength;
+        if (ctx->size     == -1) ctx->size     = prev_ctx->size;
+    }
+
+    for (int c = 0; c < 3; c++)
+    {
+        chroma_smooth_plane_context_t * ctx = &pv->plane_ctx[c];
+
+        ctx->width = init->geometry.width;
+
+        // Replace unset values with defaults
+        if (ctx->strength == -1)
+        {
+            ctx->strength = CHROMA_SMOOTH_STRENGTH_DEFAULT;
+        }
+        if (ctx->size     == -1)
+        {
+            ctx->size     = CHROMA_SMOOTH_SIZE_DEFAULT;
+        }
+
+        // Sanitize
+        if (ctx->strength < 0)   ctx->strength = 0;
+        if (ctx->strength > 1.5) ctx->strength = 1.5;
+        if (ctx->size % 2 == 0) ctx->size--;
+        if (ctx->size < CHROMA_SMOOTH_SIZE_MIN) ctx->size = CHROMA_SMOOTH_SIZE_MIN;
+        if (ctx->size > CHROMA_SMOOTH_SIZE_MAX) ctx->size = CHROMA_SMOOTH_SIZE_MAX;
+
+        ctx->amount    = ctx->strength * 65536.0;
+        ctx->steps     = ctx->size / 2;
+        ctx->scalebits = ctx->steps * 4;
+        ctx->halfscale = 1 << (ctx->scalebits - 1);
+    }
+
+    if (chroma_smooth_init_thread(filter, 1) < 0)
+    {
+        chroma_smooth_close(filter);
+        return -1;
+    }
+
+    return 0;
+}
+
+static void chroma_smooth_thread_close(hb_filter_private_t *pv)
+{
+    int c, z;
+    for (c = 0; c < 3; c++)
+    {
+        chroma_smooth_plane_context_t * ctx = &pv->plane_ctx[c];
+        for (int t = 0; t < pv->threads; t++)
+        {
+            chroma_smooth_thread_context_t * tctx = &pv->thread_ctx[t][c];
+            for (z = 0; z < 2 * ctx->steps; z++)
+            {
+                free(tctx->SC[z]);
+                tctx->SC[z] = NULL;
+            }
+        }
+    }
+    free(pv->thread_ctx);
+}
+
+static int chroma_smooth_init_thread(hb_filter_object_t *filter, int threads)
+{
+    hb_filter_private_t * pv = filter->private_data;
+
+    chroma_smooth_thread_close(pv);
+    pv->thread_ctx = calloc(threads, sizeof(chroma_smooth_thread_context3_t));
+    pv->threads = threads;
+    for (int c = 0; c < 3; c++)
+    {
+        chroma_smooth_plane_context_t * ctx = &pv->plane_ctx[c];
+        int w = hb_image_width(ctx->pix_fmt, ctx->width, c);
+
+        for (int t = 0; t < threads; t++)
+        {
+            chroma_smooth_thread_context_t * tctx = &pv->thread_ctx[t][c];
+            int z;
+            for (z = 0; z < 2 * ctx->steps; z++)
+            {
+                tctx->SC[z] = malloc(sizeof(*(tctx->SC[z])) *
+                                     (w + 2 * ctx->steps));
+                if (tctx->SC[z] == NULL)
+                {
+                    hb_error("Chroma Smooth calloc failed");
+                    chroma_smooth_close(filter);
+                    return -1;
+                }
+            }
+        }
+    }
+    return 0;
+}
+
+static void chroma_smooth_close(hb_filter_object_t * filter)
+{
+    hb_filter_private_t *pv = filter->private_data;
+
+    if (pv == NULL)
+    {
+        return;
+    }
+
+    chroma_smooth_thread_close(pv);
+    free(pv);
+    filter->private_data = NULL;
+}
+
+static int chroma_smooth_work_thread(hb_filter_object_t *filter,
+                                     hb_buffer_t ** buf_in,
+                                     hb_buffer_t ** buf_out, int thread)
+{
+    hb_filter_private_t *pv = filter->private_data;
+    hb_buffer_t *in = *buf_in, *out;
+
+    if (in->s.flags & HB_BUF_FLAG_EOF)
+    {
+        *buf_out = in;
+        *buf_in = NULL;
+        return HB_FILTER_DONE;
+    }
+
+    out = hb_frame_buffer_init(in->f.fmt, in->f.width, in->f.height);
+
+    int c;
+    for (c = 0; c < 3; c++)
+    {
+        chroma_smooth_plane_context_t  * ctx  = &pv->plane_ctx[c];
+        chroma_smooth_thread_context_t * tctx = &pv->thread_ctx[thread][c];
+
+        if (c == 0)
+        {
+            // Luma
+            luma_copy(in->plane[c].data,
+                      out->plane[c].data,
+                      in->plane[c].width,
+                      in->plane[c].height,
+                      in->plane[c].stride,
+                      ctx, tctx);
+        }
+        else
+        {
+            // Chroma
+            chroma_smooth(in->plane[c].data,
+                          out->plane[c].data,
+                          in->plane[c].width,
+                          in->plane[c].height,
+                          in->plane[c].stride,
+                          ctx, tctx);
+        }
+    }
+
+    out->s = in->s;
+    *buf_out = out;
+
+    return HB_FILTER_OK;
+}
+
+static int chroma_smooth_work(hb_filter_object_t *filter,
+                              hb_buffer_t ** buf_in,
+                              hb_buffer_t ** buf_out)
+{
+    return chroma_smooth_work_thread(filter, buf_in, buf_out, 0);
+}
index 7e3636d1416ef58cfd3ac277898bfd418efe9fe4..8bc47adbe8352a5751ba4459b63af2ba4594199a 100644 (file)
@@ -4101,6 +4101,10 @@ hb_filter_object_t * hb_filter_get( int filter_id )
             filter = &hb_filter_nlmeans;
             break;
 
+        case HB_FILTER_CHROMA_SMOOTH:
+            filter = &hb_filter_chroma_smooth;
+            break;
+
         case HB_FILTER_RENDER_SUB:
             filter = &hb_filter_render_sub;
             break;
@@ -4164,6 +4168,7 @@ hb_filter_object_t * hb_filter_init( int filter_id )
     {
         case HB_FILTER_UNSHARP:
         case HB_FILTER_LAPSHARP:
+        case HB_FILTER_CHROMA_SMOOTH:
         {
             hb_filter_object_t * wrapper;
 
index 2d332d7feaa086230efec210bc4d4db8cdf516b5..a2a86fa83b5f63bfa76148e33d944079880f3fd7 100644 (file)
@@ -1322,6 +1322,7 @@ enum
     HB_FILTER_DENOISE,
     HB_FILTER_HQDN3D = HB_FILTER_DENOISE,
     HB_FILTER_NLMEANS,
+    HB_FILTER_CHROMA_SMOOTH,
     HB_FILTER_RENDER_SUB,
     HB_FILTER_CROP_SCALE,
     HB_FILTER_LAPSHARP,
index 8983a13cdfb17013f97640291d219620457a6409..5357a3af7ca50758a1fdcf724fc38ecd996296ba 100644 (file)
@@ -453,6 +453,7 @@ extern hb_filter_object_t hb_filter_vfr;
 extern hb_filter_object_t hb_filter_deblock;
 extern hb_filter_object_t hb_filter_denoise;
 extern hb_filter_object_t hb_filter_nlmeans;
+extern hb_filter_object_t hb_filter_chroma_smooth;
 extern hb_filter_object_t hb_filter_render_sub;
 extern hb_filter_object_t hb_filter_crop_scale;
 extern hb_filter_object_t hb_filter_rotate;
index e4e3d56a32382abb962e5fab9ab04730acbff078..c7f9ae052e5fec26a90a0a04f095f2f9d76cc135 100644 (file)
@@ -70,6 +70,29 @@ static hb_filter_param_t hqdn3d_presets[] =
                                                         },
 };
 
+static hb_filter_param_t chroma_smooth_presets[] =
+{
+    { 1, "Custom",      "custom",     NULL              },
+    { 2, "Ultralight",  "ultralight", NULL              },
+    { 3, "Light",       "light",      NULL              },
+    { 4, "Medium",      "medium",     NULL              },
+    { 5, "Strong",      "strong",     NULL              },
+    { 6, "Stronger",    "stronger",   NULL              },
+    { 7, "Very Strong", "verystrong", NULL              },
+    { 0, NULL,          NULL,         NULL              }
+};
+
+static hb_filter_param_t chroma_smooth_tunes[] =
+{
+    { 0, "None",        "none",       NULL              },
+    { 1, "Tiny",        "tiny",       NULL              },
+    { 2, "Small",       "small",      NULL              },
+    { 3, "Medium",      "medium",     NULL              },
+    { 4, "Wide",        "wide",       NULL              },
+    { 5, "Very Wide",   "verywide",   NULL              },
+    { 0, NULL,          NULL,         NULL              }
+};
+
 static hb_filter_param_t unsharp_presets[] =
 {
     { 1, "Custom",      "custom",     NULL              },
@@ -188,6 +211,10 @@ static filter_param_map_t param_map[] =
     { HB_FILTER_HQDN3D,      hqdn3d_presets,      NULL,
       sizeof(hqdn3d_presets) / sizeof(hb_filter_param_t),      0, },
 
+    { HB_FILTER_CHROMA_SMOOTH, chroma_smooth_presets, chroma_smooth_tunes,
+      sizeof(chroma_smooth_presets) / sizeof(hb_filter_param_t),
+      sizeof(chroma_smooth_tunes)   / sizeof(hb_filter_param_t),  },
+
     { HB_FILTER_UNSHARP,     unsharp_presets,     unsharp_tunes,
       sizeof(unsharp_presets) / sizeof(hb_filter_param_t),
       sizeof(unsharp_tunes)   / sizeof(hb_filter_param_t),        },
@@ -463,6 +490,201 @@ static hb_dict_t * generate_nlmeans_settings(const char *preset,
     return settings;
 }
 
+static hb_dict_t * generate_chroma_smooth_settings(const char *preset,
+                                                   const char *tune,
+                                                   const char *custom)
+{
+    hb_dict_t * settings;
+
+    if (preset == NULL)
+        return NULL;
+
+    if (!strcasecmp(preset, "custom"))
+    {
+        return hb_parse_filter_settings(custom);
+    }
+    if (!strcasecmp(preset, "ultralight") ||
+        !strcasecmp(preset, "light") ||
+        !strcasecmp(preset, "medium") ||
+        !strcasecmp(preset, "strong") ||
+        !strcasecmp(preset, "stronger") ||
+        !strcasecmp(preset, "verystrong"))
+    {
+        double strength;
+        int    size;
+
+        if (tune == NULL || !strcasecmp(tune, "none"))
+        {
+            strength = 0.25;
+            size     = 7;
+            if (!strcasecmp(preset, "ultralight"))
+            {
+                strength = 0.05;
+            }
+            else if (!strcasecmp(preset, "light"))
+            {
+                strength = 0.15;
+            }
+            else if (!strcasecmp(preset, "strong"))
+            {
+                strength = 0.5;
+            }
+            else if (!strcasecmp(preset, "stronger"))
+            {
+                strength = 0.8;
+            }
+            else if (!strcasecmp(preset, "verystrong"))
+            {
+                strength = 1.2;
+            }
+        }
+        else if (!strcasecmp(tune, "tiny"))
+        {
+            strength = 0.4;
+            size     = 3;
+            if (!strcasecmp(preset, "ultralight"))
+            {
+                strength = 0.15;
+            }
+            else if (!strcasecmp(preset, "light"))
+            {
+                strength = 0.25;
+            }
+            else if (!strcasecmp(preset, "strong"))
+            {
+                strength = 0.8;
+            }
+            else if (!strcasecmp(preset, "stronger"))
+            {
+                strength = 1.2;
+            }
+            else if (!strcasecmp(preset, "verystrong"))
+            {
+                strength = 1.5;
+            }
+        }
+        else if (!strcasecmp(tune, "small"))
+        {
+            strength = 0.275;
+            size     = 7;
+            if (!strcasecmp(preset, "ultralight"))
+            {
+                strength = 0.055;
+            }
+            else if (!strcasecmp(preset, "light"))
+            {
+                strength = 0.165;
+            }
+            else if (!strcasecmp(preset, "strong"))
+            {
+                strength = 0.55;
+            }
+            else if (!strcasecmp(preset, "stronger"))
+            {
+                strength = 0.9;
+            }
+            else if (!strcasecmp(preset, "verystrong"))
+            {
+                strength = 1.35;
+            }
+        }
+        else if (!strcasecmp(tune, "medium"))
+        {
+            strength = 0.275;
+            size     = 9;
+            if (!strcasecmp(preset, "ultralight"))
+            {
+                strength = 0.055;
+            }
+            else if (!strcasecmp(preset, "light"))
+            {
+                strength = 0.165;
+            }
+            else if (!strcasecmp(preset, "strong"))
+            {
+                strength = 0.55;
+            }
+            else if (!strcasecmp(preset, "stronger"))
+            {
+                strength = 0.9;
+            }
+            else if (!strcasecmp(preset, "verystrong"))
+            {
+                strength = 1.35;
+            }
+        }
+        else if (!strcasecmp(tune, "wide"))
+        {
+            strength = 0.275;
+            size     = 11;
+            if (!strcasecmp(preset, "ultralight"))
+            {
+                strength = 0.055;
+            }
+            else if (!strcasecmp(preset, "light"))
+            {
+                strength = 0.165;
+            }
+            else if (!strcasecmp(preset, "strong"))
+            {
+                strength = 0.55;
+            }
+            else if (!strcasecmp(preset, "stronger"))
+            {
+                strength = 0.9;
+            }
+            else if (!strcasecmp(preset, "verystrong"))
+            {
+                strength = 1.35;
+            }
+        }
+        else if (!strcasecmp(tune, "verywide"))
+        {
+            strength = 0.275;
+            size     = 13;
+            if (!strcasecmp(preset, "ultralight"))
+            {
+                strength = 0.055;
+            }
+            else if (!strcasecmp(preset, "light"))
+            {
+                strength = 0.165;
+            }
+            else if (!strcasecmp(preset, "strong"))
+            {
+                strength = 0.55;
+            }
+            else if (!strcasecmp(preset, "stronger"))
+            {
+                strength = 0.9;
+            }
+            else if (!strcasecmp(preset, "verystrong"))
+            {
+                strength = 1.35;
+            }
+        }
+        else
+        {
+            fprintf(stderr, "Unrecognized chroma smooth tune (%s).\n", tune);
+            return NULL;
+        }
+
+        settings = hb_dict_init();
+        hb_dict_set(settings, "cb-strength", hb_value_double(strength));
+        hb_dict_set(settings, "cb-size",     hb_value_int(size));
+    }
+    else
+    {
+        settings = hb_parse_filter_settings(preset);
+        if (tune != NULL)
+        {
+            fprintf(stderr, "Custom chroma smooth parameters specified; ignoring chroma smooth tune (%s).\n", tune);
+        }
+    }
+
+    return settings;
+}
+
 static hb_dict_t * generate_unsharp_settings(const char *preset,
                                              const char *tune,
                                              const char *custom)
@@ -1094,6 +1316,9 @@ hb_generate_filter_settings(int filter_id, const char *preset, const char *tune,
         case HB_FILTER_NLMEANS:
             settings = generate_nlmeans_settings(preset, tune, custom);
             break;
+        case HB_FILTER_CHROMA_SMOOTH:
+            settings = generate_chroma_smooth_settings(preset, tune, custom);
+            break;
         case HB_FILTER_LAPSHARP:
             settings = generate_lapsharp_settings(preset, tune, custom);
             break;
index 898740298d1816354dda7fffec5626a31fe8a1c3..89f7db30d9631a70bb57a48639ff29d095b11bca 100644 (file)
@@ -1389,6 +1389,41 @@ int hb_preset_apply_filters(const hb_dict_t *preset, hb_dict_t *job_dict)
         }
     }
 
+    // Chroma Smooth filter
+    const char *chroma_smooth_preset, *chroma_smooth_tune, *chroma_smooth_custom;
+    chroma_smooth_preset = hb_value_get_string(hb_dict_get(preset,
+                                                   "PictureChromaSmoothPreset"));
+    chroma_smooth_tune   = hb_value_get_string(hb_dict_get(preset,
+                                                   "PictureChromaSmoothTune"));
+    chroma_smooth_custom = hb_value_get_string(hb_dict_get(preset,
+                                                   "PictureChromaSmoothCustom"));
+    if (chroma_smooth_preset != NULL &&
+        strcasecmp(chroma_smooth_preset, "off"))
+    {
+        int filter_id = HB_FILTER_CHROMA_SMOOTH;
+        filter_settings = hb_generate_filter_settings(filter_id,
+                            chroma_smooth_preset, chroma_smooth_tune, chroma_smooth_custom);
+        if (filter_settings == NULL)
+        {
+            hb_error("Invalid chroma smooth filter settings (%s%s%s)",
+                     chroma_smooth_preset,
+                     chroma_smooth_tune ? "," : "",
+                     chroma_smooth_tune ? chroma_smooth_tune : "");
+            return -1;
+        }
+        else if (!hb_dict_get_bool(filter_settings, "disable"))
+        {
+            filter_dict = hb_dict_init();
+            hb_dict_set(filter_dict, "ID", hb_value_int(filter_id));
+            hb_dict_set(filter_dict, "Settings", filter_settings);
+            hb_add_filter2(filter_list, filter_dict);
+        }
+        else
+        {
+            hb_value_free(&filter_settings);
+        }
+    }
+
     // Sharpen filter
     const char *sharpen_filter, *sharpen_preset, *sharpen_tune, *sharpen_custom;
     sharpen_filter = hb_value_get_string(hb_dict_get(preset,
index 3c2d8ce887203b90a942f90feff82716fce26477..bd69f6dd5f171d417ffbd1755d1060d757ff88e9 100644 (file)
@@ -38,6 +38,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"fast\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -140,6 +143,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"fast\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -242,6 +248,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"fast\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -344,6 +353,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"fast\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -446,6 +458,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -548,6 +563,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -650,6 +668,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -752,6 +773,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -868,6 +892,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -984,6 +1011,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -1100,6 +1130,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -1216,6 +1249,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -1332,6 +1368,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -1448,6 +1487,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -1564,6 +1606,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -1680,6 +1725,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -1789,6 +1837,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -1891,6 +1942,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -1993,6 +2047,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -2095,6 +2152,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -2197,6 +2257,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -2299,6 +2362,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -2401,6 +2467,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -2503,6 +2572,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -2612,6 +2684,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -2714,6 +2789,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -2816,6 +2894,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -2918,6 +2999,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -3034,6 +3118,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -3150,6 +3237,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -3266,6 +3356,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -3382,6 +3475,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -3498,6 +3594,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -3600,6 +3699,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": true, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -3716,6 +3818,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -3832,6 +3937,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -3948,6 +4056,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -4064,6 +4175,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -4180,6 +4294,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -4282,6 +4399,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -4398,6 +4518,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -4500,6 +4623,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -4602,6 +4728,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -4721,6 +4850,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -4837,6 +4969,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -4953,6 +5088,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -5055,6 +5193,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -5157,6 +5298,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -5259,6 +5403,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -5361,6 +5508,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -5463,6 +5613,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -5565,6 +5718,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -5681,6 +5837,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -5797,6 +5956,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -5906,6 +6068,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -6008,6 +6173,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -6110,6 +6278,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -6212,6 +6383,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -6314,6 +6488,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -6416,6 +6593,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -6518,6 +6698,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -6620,6 +6803,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -6722,6 +6908,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -6824,6 +7013,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -6924,6 +7116,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -7024,6 +7219,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -7124,6 +7322,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -7224,6 +7425,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -7324,6 +7528,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -7424,6 +7631,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -7524,6 +7734,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -7624,6 +7837,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -7724,6 +7940,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"default\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -7833,6 +8052,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": false, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"off\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -7935,6 +8157,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": false, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"off\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -8037,6 +8262,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": false, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"off\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -8139,6 +8367,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": false, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"off\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -8255,6 +8486,9 @@ const char hb_builtin_presets_json[] =
 "                    \"Mp4iPodCompatible\": false, \n"
 "                    \"PictureAutoCrop\": true, \n"
 "                    \"PictureBottomCrop\": 0, \n"
+"                    \"PictureChromaSmoothCustom\": \"\", \n"
+"                    \"PictureChromaSmoothPreset\": \"off\", \n"
+"                    \"PictureChromaSmoothTune\": \"none\", \n"
 "                    \"PictureCombDetectCustom\": \"\", \n"
 "                    \"PictureCombDetectPreset\": \"off\", \n"
 "                    \"PictureDARWidth\": 0, \n"
@@ -8373,6 +8607,9 @@ const char hb_builtin_presets_json[] =
 "            \"Mp4iPodCompatible\": false, \n"
 "            \"PictureAutoCrop\": true, \n"
 "            \"PictureBottomCrop\": 0, \n"
+"            \"PictureChromaSmoothCustom\": \"\", \n"
+"            \"PictureChromaSmoothPreset\": \"off\", \n"
+"            \"PictureChromaSmoothTune\": \"none\", \n"
 "            \"PictureCombDetectCustom\": \"\", \n"
 "            \"PictureCombDetectPreset\": \"off\", \n"
 "            \"PictureDARWidth\": 0, \n"
@@ -8440,7 +8677,7 @@ const char hb_builtin_presets_json[] =
 "            \"x264Option\": \"\", \n"
 "            \"x264UseAdvancedOptions\": false\n"
 "        }, \n"
-"        \"VersionMajor\": 34, \n"
+"        \"VersionMajor\": 35, \n"
 "        \"VersionMicro\": 0, \n"
 "        \"VersionMinor\": 0\n"
 "    }\n"
index 3ed618ff1a6359e4c47ce7bf5b6aed0d7a3d3a17..96af01e6a7539b26a55ac6a2c4397233edb8aae1 100644 (file)
@@ -53,6 +53,9 @@
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "light",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
index 702d5a83c2105f810eb72f25e52d89d75791c1e6..3c51542a3e8cdff381f7ca667046d33f464993e7 100644 (file)
@@ -1,6 +1,6 @@
 <resources>
     <section name="PresetTemplate">
-        <integer name="VersionMajor" value="34" />
+        <integer name="VersionMajor" value="35" />
         <integer name="VersionMinor" value="0" />
         <integer name="VersionMicro" value="0" />
         <json name="Preset" file="preset_template.json" />
index a67225a70f7475972643fd36910640cd5b746cf6..76c0b28cd58f2a02c52ac139fe9ff240a4ae6b3e 100644 (file)
@@ -58,6 +58,9 @@
                     "PictureDenoiseFilter": "off",
                     "PictureDenoisePreset": "medium",
                     "PictureDenoiseTune": "none",
+                    "PictureChromaSmoothCustom": "",
+                    "PictureChromaSmoothPreset": "off",
+                    "PictureChromaSmoothTune": "none",
                     "PictureSharpenCustom": "",
                     "PictureSharpenFilter": "off",
                     "PictureSharpenPreset": "medium",
index ae96e217234f596fa404047f3018f21ed287da39..f93c681415aa200870dd92102e12d71de274133f 100644 (file)
@@ -58,6 +58,9 @@
         "PictureDenoiseFilter": "off",
         "PictureDenoisePreset": "medium",
         "PictureDenoiseTune": "none",
+        "PictureChromaSmoothCustom": "",
+        "PictureChromaSmoothPreset": "off",
+        "PictureChromaSmoothTune": "none",
         "PictureSharpenCustom": "",
         "PictureSharpenFilter": "off",
         "PictureSharpenPreset": "medium",
index b6a4a0013f8cf99167d6c50f2ddb92b8e22b0243..a55987588c7864050fcb64e3cad7da38b0f140b9 100644 (file)
 #include <sys/mount.h>
 #endif
 
-#define LAPSHARP_DEFAULT_PRESET     "medium"
-#define UNSHARP_DEFAULT_PRESET      "medium"
-#define NLMEANS_DEFAULT_PRESET      "medium"
-#define DEINTERLACE_DEFAULT_PRESET  "default"
-#define DECOMB_DEFAULT_PRESET       "default"
-#define DETELECINE_DEFAULT_PRESET   "default"
-#define COMB_DETECT_DEFAULT_PRESET  "default"
-#define HQDN3D_DEFAULT_PRESET       "medium"
-#define ROTATE_DEFAULT              "angle=180:hflip=0"
-#define DEBLOCK_DEFAULT             "qp=5"
+#define LAPSHARP_DEFAULT_PRESET      "medium"
+#define UNSHARP_DEFAULT_PRESET       "medium"
+#define CHROMA_SMOOTH_DEFAULT_PRESET "medium"
+#define NLMEANS_DEFAULT_PRESET       "medium"
+#define DEINTERLACE_DEFAULT_PRESET   "default"
+#define DECOMB_DEFAULT_PRESET        "default"
+#define DETELECINE_DEFAULT_PRESET    "default"
+#define COMB_DETECT_DEFAULT_PRESET   "default"
+#define HQDN3D_DEFAULT_PRESET        "medium"
+#define ROTATE_DEFAULT               "angle=180:hflip=0"
+#define DEBLOCK_DEFAULT              "qp=5"
 
 /* Options */
 static int     debug               = HB_DEBUG_ALL;
@@ -86,6 +87,10 @@ static int     nlmeans_disable     = 0;
 static int     nlmeans_custom      = 0;
 static char *  nlmeans             = NULL;
 static char *  nlmeans_tune        = NULL;
+static int     chroma_smooth_disable = 0;
+static int     chroma_smooth_custom  = 0;
+static char *  chroma_smooth         = NULL;
+static char *  chroma_smooth_tune    = NULL;
 static int     unsharp_disable     = 0;
 static int     unsharp_custom      = 0;
 static char *  unsharp             = NULL;
@@ -618,6 +623,8 @@ cleanup:
     free(hqdn3d);
     free(nlmeans);
     free(nlmeans_tune);
+    free(chroma_smooth);
+    free(chroma_smooth_tune);
     free(unsharp);
     free(unsharp_tune);
     free(lapsharp);
@@ -1191,6 +1198,9 @@ static void showFilterDefault(FILE* const out, int filter_id)
         case HB_FILTER_LAPSHARP:
             preset = LAPSHARP_DEFAULT_PRESET;
             break;
+        case HB_FILTER_CHROMA_SMOOTH:
+            preset = CHROMA_SMOOTH_DEFAULT_PRESET;
+            break;
         case HB_FILTER_NLMEANS:
             preset = NLMEANS_DEFAULT_PRESET;
             break;
@@ -1216,6 +1226,7 @@ static void showFilterDefault(FILE* const out, int filter_id)
     {
         case HB_FILTER_DEINTERLACE:
         case HB_FILTER_NLMEANS:
+        case HB_FILTER_CHROMA_SMOOTH:
         case HB_FILTER_UNSHARP:
         case HB_FILTER_LAPSHARP:
         case HB_FILTER_DECOMB:
@@ -1716,6 +1727,18 @@ static void ShowHelp()
     fprintf( out,
 "                           Applies to NLMeans presets only (does not affect\n"
 "                           custom settings)\n"
+"   --chroma-smooth[=string]      Sharpen video with chroma smooth filter\n");
+    showFilterPresets(out, HB_FILTER_CHROMA_SMOOTH);
+    showFilterKeys(out, HB_FILTER_CHROMA_SMOOTH);
+    showFilterDefault(out, HB_FILTER_CHROMA_SMOOTH);
+    fprintf( out,
+
+"   --no-chroma-smooth            Disable preset chroma smooth filter\n"
+"   --chroma-smooth-tune <string> Tune chroma smooth filter\n");
+    showFilterTunes(out, HB_FILTER_CHROMA_SMOOTH);
+    fprintf( out,
+"                                 Applies to chroma smooth presets only (does\n"
+"                                 not affect custom settings)\n"
 "   --unsharp[=string]      Sharpen video with unsharp filter\n");
     showFilterPresets(out, HB_FILTER_UNSHARP);
     showFilterKeys(out, HB_FILTER_UNSHARP);
@@ -2126,6 +2149,8 @@ static int ParseOptions( int argc, char ** argv )
     #define SSA_LANG             319
     #define SSA_DEFAULT          320
     #define SSA_BURN             321
+    #define FILTER_CHROMA_SMOOTH      322
+    #define FILTER_CHROMA_SMOOTH_TUNE 323
 
     for( ;; )
     {
@@ -2208,6 +2233,9 @@ static int ParseOptions( int argc, char ** argv )
             { "nlmeans",     optional_argument, NULL,    FILTER_NLMEANS },
             { "no-nlmeans",  no_argument,       &nlmeans_disable,     1 },
             { "nlmeans-tune",required_argument, NULL,    FILTER_NLMEANS_TUNE },
+            { "chroma-smooth",     optional_argument, NULL, FILTER_CHROMA_SMOOTH },
+            { "no-chroma-smooth",  no_argument,       &chroma_smooth_disable,     1 },
+            { "chroma-smooth-tune",required_argument, NULL, FILTER_CHROMA_SMOOTH_TUNE },
             { "unsharp",     optional_argument, NULL,    FILTER_UNSHARP },
             { "no-unsharp",  no_argument,       &unsharp_disable,     1 },
             { "unsharp-tune",required_argument, NULL,    FILTER_UNSHARP_TUNE },
@@ -2686,6 +2714,21 @@ static int ParseOptions( int argc, char ** argv )
                 free(nlmeans_tune);
                 nlmeans_tune = strdup(optarg);
                 break;
+            case FILTER_CHROMA_SMOOTH:
+                free(chroma_smooth);
+                if (optarg != NULL)
+                {
+                    chroma_smooth = strdup(optarg);
+                }
+                else
+                {
+                    chroma_smooth = strdup(CHROMA_SMOOTH_DEFAULT_PRESET);
+                }
+                break;
+            case FILTER_CHROMA_SMOOTH_TUNE:
+                free(chroma_smooth_tune);
+                chroma_smooth_tune = strdup(optarg);
+                break;
             case FILTER_UNSHARP:
                 free(unsharp);
                 if (optarg != NULL)
@@ -3217,6 +3260,32 @@ static int ParseOptions( int argc, char ** argv )
         }
     }
 
+    if (chroma_smooth != NULL)
+    {
+        if (chroma_smooth_disable)
+        {
+            fprintf(stderr,
+                    "Incompatible options --chroma-smooth and --no-chroma-smooth\n");
+            return -1;
+        }
+        if (!hb_validate_filter_preset(HB_FILTER_CHROMA_SMOOTH, chroma_smooth,
+                                       chroma_smooth_tune, NULL))
+        {
+            // Nothing to do, but must validate preset before
+            // attempting to validate custom settings to prevent potential
+            // false positive
+        }
+        else if (!hb_validate_filter_string(HB_FILTER_CHROMA_SMOOTH, chroma_smooth))
+        {
+            chroma_smooth_custom = 1;
+        }
+        else
+        {
+            fprintf(stderr, "Invalid chroma smooth option %s\n", chroma_smooth);
+            return -1;
+        }
+    }
+
     if (unsharp != NULL)
     {
         if (unsharp_disable)
@@ -4259,6 +4328,30 @@ static hb_dict_t * PreparePreset(const char *preset_name)
                         hb_value_string(nlmeans));
         }
     }
+    if (chroma_smooth_disable)
+    {
+        hb_dict_set(preset, "PictureChromaSmoothPreset", hb_value_string("off"));
+    }
+    if (chroma_smooth != NULL)
+    {
+        if (!chroma_smooth_custom)
+        {
+            hb_dict_set(preset, "PictureChromaSmoothPreset",
+                        hb_value_string(chroma_smooth));
+            if (chroma_smooth_tune != NULL)
+            {
+                hb_dict_set(preset, "PictureChromaSmoothTune",
+                            hb_value_string(chroma_smooth_tune));
+            }
+        }
+        else
+        {
+            hb_dict_set(preset, "PictureChromaSmoothPreset",
+                        hb_value_string("custom"));
+            hb_dict_set(preset, "PictureChromaSmoothCustom",
+                        hb_value_string(chroma_smooth));
+        }
+    }
     if (unsharp_disable && !strcasecmp(s, "unsharp"))
     {
         hb_dict_set(preset, "PictureSharpenFilter", hb_value_string("off"));