example: va: Add skin tone enhancement.
authorVíctor Manuel Jáquez Leal <vjaquez@igalia.com>
Thu, 12 Aug 2021 12:08:19 +0000 (14:08 +0200)
committerVíctor Manuel Jáquez Leal <vjaquez@igalia.com>
Wed, 18 Aug 2021 12:51:01 +0000 (14:51 +0200)
If camera is used as input stream and skin tone parameter is available
in vapostproc, and no random changes are enabled, the skin tone will
be enabled.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2470>

tests/examples/va/multiple-vpp.c

index b066e29..05d680e 100644 (file)
@@ -158,23 +158,34 @@ message_handler (GstBus * bus, GstMessage * msg, gpointer data)
 }
 
 static void
-config_vpp (GstElement * vpp)
+config_simple (struct _app *app)
 {
   GParamSpec *pspec;
-  GObjectClass *g_class = G_OBJECT_GET_CLASS (vpp);
+  GObjectClass *g_class = G_OBJECT_GET_CLASS (app->vpp);
   const static gchar *props[] = { "brightness", "hue", "saturation",
     "contrast"
   };
   gfloat max;
   guint i;
 
+  if (camera && (pspec = g_object_class_find_property (g_class, "skin-tone"))) {
+    if (G_PARAM_SPEC_TYPE (pspec) == G_TYPE_BOOLEAN) {
+      g_object_set (app->vpp, "skin-tone", TRUE, NULL);
+    } else {
+      max = ((GParamSpecFloat *) pspec)->maximum;
+      g_object_set (app->vpp, "skin-tone", max, NULL);
+    }
+
+    return;
+  }
+
   for (i = 0; i < G_N_ELEMENTS (props); i++) {
     pspec = g_object_class_find_property (g_class, props[i]);
     if (!pspec)
       continue;
 
     max = ((GParamSpecFloat *) pspec)->maximum;
-    g_object_set (vpp, props[i], max, NULL);
+    g_object_set (app->vpp, props[i], max, NULL);
   }
 }
 
@@ -208,7 +219,7 @@ build_pipeline (struct _app *app)
 
   app->vpp = gst_bin_get_by_name (GST_BIN (app->pipeline), "vpp");
   if (!randomcb && !randomdir && !randomsharpen && !randomcrop)
-    config_vpp (app->vpp);
+    config_simple (app);
 
   app->crop = gst_bin_get_by_name (GST_BIN (app->pipeline), "crop");