summaryrefslogtreecommitdiff
path: root/gst-libs
diff options
context:
space:
mode:
authorYan Wang <yan.wang@linux.intel.com>2019-09-05 16:40:52 +0800
committerVíctor Manuel Jáquez Leal <vjaquez@igalia.com>2019-09-30 18:14:53 +0000
commit4c87644914139c22542d0f485d050cca486188a5 (patch)
treeec2562e0ced3516fdffe98606db0c64afdaed9a6 /gst-libs
parentf67ec886a3c264d5bc5d39337380e22ee09aafb8 (diff)
vaapipostproc: Use level value for skin-tone-enhancement filter.
Currently the parameter of skin-tone-enhancement filter is forced to zero. In fact it could be set different value by the user. So create a new property named as "skin-tone-enhancement-level" for accepting the used defined parameter value. At the same time, skin-tone-enhancement is marked as deprecated. When skin-tone-enhancement-level is set, skin-tone-enhancement will be ignored.
Diffstat (limited to 'gst-libs')
-rw-r--r--gst-libs/gst/vaapi/gstvaapifilter.c98
-rw-r--r--gst-libs/gst/vaapi/gstvaapifilter.h14
2 files changed, 105 insertions, 7 deletions
diff --git a/gst-libs/gst/vaapi/gstvaapifilter.c b/gst-libs/gst/vaapi/gstvaapifilter.c
index 766b421f..64a3ff3d 100644
--- a/gst-libs/gst/vaapi/gstvaapifilter.c
+++ b/gst-libs/gst/vaapi/gstvaapifilter.c
@@ -330,7 +330,10 @@ enum
PROP_DEINTERLACING = GST_VAAPI_FILTER_OP_DEINTERLACING,
PROP_SCALING = GST_VAAPI_FILTER_OP_SCALING,
PROP_VIDEO_DIRECTION = GST_VAAPI_FILTER_OP_VIDEO_DIRECTION,
+#ifndef GST_REMOVE_DEPRECATED
PROP_SKINTONE = GST_VAAPI_FILTER_OP_SKINTONE,
+#endif
+ PROP_SKINTONE_LEVEL = GST_VAAPI_FILTER_OP_SKINTONE_LEVEL,
N_PROPERTIES
};
@@ -465,6 +468,7 @@ init_properties (void)
GST_TYPE_VIDEO_ORIENTATION_METHOD,
DEFAULT_VIDEO_DIRECTION, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+#ifndef GST_REMOVE_DEPRECATED
/**
* GstVaapiFilter:skin-tone-enhancement:
*
@@ -474,6 +478,18 @@ init_properties (void)
"Skin tone enhancement",
"Apply the skin tone enhancement algorithm",
FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+#endif
+
+ /**
+ * GstVaapiFilter:skin-tone-enhancement-level:
+ *
+ * Apply the skin tone enhancement algorithm with specified value.
+ */
+ g_properties[PROP_SKINTONE_LEVEL] =
+ g_param_spec_uint ("skin-tone-enhancement-level",
+ "Skin tone enhancement level",
+ "Apply the skin tone enhancement algorithm with specified level", 0, 9, 3,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
}
static void
@@ -523,7 +539,10 @@ op_data_new (GstVaapiFilterOp op, GParamSpec * pspec)
op_data->va_cap_size = sizeof (VAProcFilterCap);
op_data->va_buffer_size = sizeof (VAProcFilterParameterBuffer);
break;
+#ifndef GST_REMOVE_DEPRECATED
case GST_VAAPI_FILTER_OP_SKINTONE:
+#endif
+ case GST_VAAPI_FILTER_OP_SKINTONE_LEVEL:
op_data->va_type = VAProcFilterSkinToneEnhancement;
op_data->va_buffer_size = sizeof (VAProcFilterParameterBuffer);
break;
@@ -1023,30 +1042,57 @@ op_set_deinterlace (GstVaapiFilter * filter, GstVaapiFilterOpData * op_data,
return success;
}
-/* Update skin tone enhancement */
+/* Update skin tone enhancement level */
static gboolean
-op_set_skintone_unlocked (GstVaapiFilter * filter,
- GstVaapiFilterOpData * op_data, gboolean value)
+op_set_skintone_level_unlocked (GstVaapiFilter * filter,
+ GstVaapiFilterOpData * op_data, guint value)
{
VAProcFilterParameterBuffer *buf;
if (!op_data || !op_ensure_buffer (filter, op_data))
return FALSE;
- op_data->is_enabled = value;
- if (!op_data->is_enabled)
- return TRUE;
+ op_data->is_enabled = 1;
buf = vaapi_map_buffer (filter->va_display, op_data->va_buffer);
if (!buf)
return FALSE;
buf->type = op_data->va_type;
- buf->value = 0;
+ buf->value = value;
vaapi_unmap_buffer (filter->va_display, op_data->va_buffer, NULL);
return TRUE;
}
static inline gboolean
+op_set_skintone_level (GstVaapiFilter * filter,
+ GstVaapiFilterOpData * op_data, guint value)
+{
+ gboolean success = FALSE;
+
+ GST_VAAPI_DISPLAY_LOCK (filter->display);
+ success = op_set_skintone_level_unlocked (filter, op_data, value);
+ GST_VAAPI_DISPLAY_UNLOCK (filter->display);
+ return success;
+}
+
+#ifndef GST_REMOVE_DEPRECATED
+/* Update skin tone enhancement */
+static gboolean
+op_set_skintone_unlocked (GstVaapiFilter * filter,
+ GstVaapiFilterOpData * op_data, gboolean value)
+{
+ if (!op_data)
+ return FALSE;
+
+ if (!value) {
+ op_data->is_enabled = 0;
+ return TRUE;
+ }
+
+ return op_set_skintone_level_unlocked (filter, op_data, 3);
+}
+
+static inline gboolean
op_set_skintone (GstVaapiFilter * filter, GstVaapiFilterOpData * op_data,
gboolean enhance)
{
@@ -1057,6 +1103,7 @@ op_set_skintone (GstVaapiFilter * filter, GstVaapiFilterOpData * op_data,
GST_VAAPI_DISPLAY_UNLOCK (filter->display);
return success;
}
+#endif
static gboolean
deint_refs_set (GArray * refs, GstVaapiSurface ** surfaces, guint num_surfaces)
@@ -1441,10 +1488,16 @@ gst_vaapi_filter_set_operation (GstVaapiFilter * filter, GstVaapiFilterOp op,
case GST_VAAPI_FILTER_OP_SCALING:
return gst_vaapi_filter_set_scaling (filter, value ?
g_value_get_enum (value) : DEFAULT_SCALING);
+#ifndef GST_REMOVE_DEPRECATED
case GST_VAAPI_FILTER_OP_SKINTONE:
return op_set_skintone (filter, op_data,
(value ? g_value_get_boolean (value) :
G_PARAM_SPEC_BOOLEAN (op_data->pspec)->default_value));
+#endif
+ case GST_VAAPI_FILTER_OP_SKINTONE_LEVEL:
+ return op_set_skintone_level (filter, op_data,
+ (value ? g_value_get_uint (value) :
+ G_PARAM_SPEC_UINT (op_data->pspec)->default_value));
case GST_VAAPI_FILTER_OP_VIDEO_DIRECTION:
return gst_vaapi_filter_set_video_direction (filter, value ?
g_value_get_enum (value) : DEFAULT_VIDEO_DIRECTION);
@@ -1985,6 +2038,7 @@ gst_vaapi_filter_set_scaling (GstVaapiFilter * filter,
return TRUE;
}
+#ifndef GST_REMOVE_DEPRECATED
/**
* gst_vaapi_filter_set_skintone:
* @filter: a #GstVaapiFilter
@@ -2003,6 +2057,26 @@ gst_vaapi_filter_set_skintone (GstVaapiFilter * filter, gboolean enhance)
return op_set_skintone (filter,
find_operation (filter, GST_VAAPI_FILTER_OP_SKINTONE), enhance);
}
+#endif
+
+/**
+ * gst_vaapi_filter_set_skintone_level:
+ * @filter: a #GstVaapiFilter
+ * @value: the value if enable the skin tone enhancement algorithm
+ *
+ * Applies the skin tone enhancement algorithm with specifled value.
+ *
+ * Return value: %TRUE if the operation is supported, %FALSE
+ * otherwise.
+ **/
+gboolean
+gst_vaapi_filter_set_skintone_level (GstVaapiFilter * filter, guint value)
+{
+ g_return_val_if_fail (filter != NULL, FALSE);
+
+ return op_set_skintone_level (filter,
+ find_operation (filter, GST_VAAPI_FILTER_OP_SKINTONE_LEVEL), value);
+}
/**
* gst_vaapi_filter_set_video_direction:
@@ -2124,6 +2198,7 @@ gst_vaapi_filter_get_scaling_default (GstVaapiFilter * filter)
return DEFAULT_SCALING;
}
+#ifndef GST_REMOVE_DEPRECATED
gboolean
gst_vaapi_filter_get_skintone_default (GstVaapiFilter * filter)
{
@@ -2131,6 +2206,15 @@ gst_vaapi_filter_get_skintone_default (GstVaapiFilter * filter)
return FALSE;
}
+#endif
+
+guint
+gst_vaapi_filter_get_skintone_level_default (GstVaapiFilter * filter)
+{
+ g_return_val_if_fail (filter != NULL, FALSE);
+
+ return 3;
+}
GstVideoOrientationMethod
gst_vaapi_filter_get_video_direction_default (GstVaapiFilter * filter)
diff --git a/gst-libs/gst/vaapi/gstvaapifilter.h b/gst-libs/gst/vaapi/gstvaapifilter.h
index 3424ba5a..fcd2e45b 100644
--- a/gst-libs/gst/vaapi/gstvaapifilter.h
+++ b/gst-libs/gst/vaapi/gstvaapifilter.h
@@ -51,6 +51,7 @@ typedef struct _GstVaapiFilterOpInfo GstVaapiFilterOpInfo;
* @GST_VAAPI_FILTER_OP_VIDEO_DIRECTION: Change video direction
* (#GstVideoOrientationMethod).
* @GST_VAAPI_FILTER_OP_SKINTONE: Skin tone enhancement (bool).
+ * @GST_VAAPI_FILTER_OP_SKINTONE_LEVEL: Skin tone enhancement (uint).
*
* The set of operations that could be applied to the filter.
*/
@@ -66,7 +67,10 @@ typedef enum {
GST_VAAPI_FILTER_OP_DEINTERLACING,
GST_VAAPI_FILTER_OP_SCALING,
GST_VAAPI_FILTER_OP_VIDEO_DIRECTION,
+#ifndef GST_REMOVE_DEPRECATED
GST_VAAPI_FILTER_OP_SKINTONE,
+#endif
+ GST_VAAPI_FILTER_OP_SKINTONE_LEVEL,
} GstVaapiFilterOp;
/**
@@ -259,9 +263,14 @@ gst_vaapi_filter_set_video_direction (GstVaapiFilter * filter,
GstVideoOrientationMethod
gst_vaapi_filter_get_video_direction (GstVaapiFilter * filter);
+#ifndef GST_REMOVE_DEPRECATED
gboolean
gst_vaapi_filter_set_skintone (GstVaapiFilter * filter,
gboolean enhance);
+#endif
+
+gboolean
+gst_vaapi_filter_set_skintone_level (GstVaapiFilter * filter, guint value);
gfloat
gst_vaapi_filter_get_denoising_level_default (GstVaapiFilter * filter);
@@ -287,8 +296,13 @@ gst_vaapi_filter_get_scaling_default (GstVaapiFilter * filter);
GstVideoOrientationMethod
gst_vaapi_filter_get_video_direction_default (GstVaapiFilter * filter);
+#ifndef GST_REMOVE_DEPRECATED
gboolean
gst_vaapi_filter_get_skintone_default (GstVaapiFilter * filter);
+#endif
+
+guint
+gst_vaapi_filter_get_skintone_level_default (GstVaapiFilter * filter);
#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstVaapiFilter, gst_object_unref)