[Pkg-gstreamer-commits] [gstreamer-vaapi] 135/176: vaapipostproc: add support for colorbalance filters.
Vincent Cheng
vcheng at moszumanska.debian.org
Tue Jun 3 08:09:35 UTC 2014
This is an automated email from the git hooks/post-receive script.
vcheng pushed a commit to branch upstream
in repository gstreamer-vaapi.
commit 467bf95c0906098f848a7aa81416c3a16760dad8
Author: Zhao, Halley <halley.zhao at intel.com>
Date: Fri Dec 13 04:14:41 2013 +0800
vaapipostproc: add support for colorbalance filters.
Add support for hue, saturation, brightness and constrat adjustments.
Also fix cap info local copy to match the really expected cap subtype
of interest.
https://bugzilla.gnome.org/show_bug.cgi?id=720376
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne at intel.com>
---
gst-libs/gst/vaapi/gstvaapifilter.c | 8 ++--
gst/vaapi/gstvaapipostproc.c | 96 +++++++++++++++++++++++++++++++++++++
gst/vaapi/gstvaapipostproc.h | 6 +++
3 files changed, 106 insertions(+), 4 deletions(-)
diff --git a/gst-libs/gst/vaapi/gstvaapifilter.c b/gst-libs/gst/vaapi/gstvaapifilter.c
index 68aeb8c..c6e02fa 100755
--- a/gst-libs/gst/vaapi/gstvaapifilter.c
+++ b/gst-libs/gst/vaapi/gstvaapifilter.c
@@ -483,14 +483,14 @@ op_data_ensure_caps(GstVaapiFilterOpData *op_data, gpointer filter_caps,
guint num_filter_caps)
{
guchar *filter_cap = filter_caps;
- guint i;
+ guint i, va_num_caps = num_filter_caps;
// Find the VA filter cap matching the op info sub-type
if (op_data->va_subtype) {
for (i = 0; i < num_filter_caps; i++) {
/* XXX: sub-type shall always be the first field */
if (op_data->va_subtype == *(guint *)filter_cap) {
- num_filter_caps = 1;
+ va_num_caps= 1;
break;
}
filter_cap += op_data->va_cap_size;
@@ -500,11 +500,11 @@ op_data_ensure_caps(GstVaapiFilterOpData *op_data, gpointer filter_caps,
}
op_data->va_caps = g_memdup(filter_cap,
- op_data->va_cap_size * num_filter_caps);
+ op_data->va_cap_size * va_num_caps);
if (!op_data->va_caps)
return FALSE;
- op_data->va_num_caps = num_filter_caps;
+ op_data->va_num_caps = va_num_caps;
return TRUE;
}
diff --git a/gst/vaapi/gstvaapipostproc.c b/gst/vaapi/gstvaapipostproc.c
index ace0e61..2194252 100644
--- a/gst/vaapi/gstvaapipostproc.c
+++ b/gst/vaapi/gstvaapipostproc.c
@@ -105,6 +105,10 @@ enum {
PROP_DEINTERLACE_METHOD,
PROP_DENOISE,
PROP_SHARPEN,
+ PROP_HUE,
+ PROP_SATURATION,
+ PROP_BRIGHTNESS,
+ PROP_CONTRAST,
};
#define DEFAULT_FORMAT GST_VIDEO_FORMAT_ENCODED
@@ -448,6 +452,26 @@ gst_vaapipostproc_process_vpp(GstBaseTransform *trans, GstBuffer *inbuf,
postproc->sharpen_level))
return GST_FLOW_NOT_SUPPORTED;
+ if ((postproc->flags & GST_VAAPI_POSTPROC_FLAG_HUE) &&
+ !gst_vaapi_filter_set_hue(postproc->filter,
+ postproc->hue))
+ return GST_FLOW_NOT_SUPPORTED;
+
+ if ((postproc->flags & GST_VAAPI_POSTPROC_FLAG_SATURATION) &&
+ !gst_vaapi_filter_set_saturation(postproc->filter,
+ postproc->saturation))
+ return GST_FLOW_NOT_SUPPORTED;
+
+ if ((postproc->flags & GST_VAAPI_POSTPROC_FLAG_BRIGHTNESS) &&
+ !gst_vaapi_filter_set_brightness(postproc->filter,
+ postproc->brightness))
+ return GST_FLOW_NOT_SUPPORTED;
+
+ if ((postproc->flags & GST_VAAPI_POSTPROC_FLAG_CONTRAST) &&
+ !gst_vaapi_filter_set_contrast(postproc->filter,
+ postproc->contrast))
+ return GST_FLOW_NOT_SUPPORTED;
+
inbuf_meta = gst_buffer_get_vaapi_video_meta(inbuf);
if (!inbuf_meta)
goto error_invalid_buffer;
@@ -1226,6 +1250,22 @@ gst_vaapipostproc_set_property(
postproc->sharpen_level = g_value_get_float(value);
postproc->flags |= GST_VAAPI_POSTPROC_FLAG_SHARPEN;
break;
+ case PROP_HUE:
+ postproc->hue = g_value_get_float(value);
+ postproc->flags |= GST_VAAPI_POSTPROC_FLAG_HUE;
+ break;
+ case PROP_SATURATION:
+ postproc->saturation = g_value_get_float(value);
+ postproc->flags |= GST_VAAPI_POSTPROC_FLAG_SATURATION;
+ break;
+ case PROP_BRIGHTNESS:
+ postproc->brightness = g_value_get_float(value);
+ postproc->flags |= GST_VAAPI_POSTPROC_FLAG_BRIGHTNESS;
+ break;
+ case PROP_CONTRAST:
+ postproc->contrast = g_value_get_float(value);
+ postproc->flags |= GST_VAAPI_POSTPROC_FLAG_CONTRAST;
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
break;
@@ -1267,6 +1307,18 @@ gst_vaapipostproc_get_property(
case PROP_SHARPEN:
g_value_set_float(value, postproc->sharpen_level);
break;
+ case PROP_HUE:
+ g_value_set_float(value, postproc->hue);
+ break;
+ case PROP_SATURATION:
+ g_value_set_float(value, postproc->saturation);
+ break;
+ case PROP_BRIGHTNESS:
+ g_value_set_float(value, postproc->brightness);
+ break;
+ case PROP_CONTRAST:
+ g_value_set_float(value, postproc->contrast);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
break;
@@ -1435,6 +1487,50 @@ gst_vaapipostproc_class_init(GstVaapiPostprocClass *klass)
g_object_class_install_property(object_class,
PROP_SHARPEN, filter_op->pspec);
+ /**
+ * GstVaapiPostproc:hue:
+ *
+ * The color hue, expressed as a float value. Range is -180.0 to
+ * 180.0. Default value is 0.0 and represents no modification.
+ */
+ filter_op = find_filter_op(filter_ops, GST_VAAPI_FILTER_OP_HUE);
+ if (filter_op)
+ g_object_class_install_property(object_class,
+ PROP_HUE, filter_op->pspec);
+
+ /**
+ * GstVaapiPostproc:saturation:
+ *
+ * The color saturation, expressed as a float value. Range is 0.0
+ * to 2.0. Default value is 1.0 and represents no modification.
+ */
+ filter_op = find_filter_op(filter_ops, GST_VAAPI_FILTER_OP_SATURATION);
+ if (filter_op)
+ g_object_class_install_property(object_class,
+ PROP_SATURATION, filter_op->pspec);
+
+ /**
+ * GstVaapiPostproc:brightness:
+ *
+ * The color brightness, expressed as a float value. Range is -1.0
+ * to 1.0. Default value is 0.0 and represents no modification.
+ */
+ filter_op = find_filter_op(filter_ops, GST_VAAPI_FILTER_OP_BRIGHTNESS);
+ if (filter_op)
+ g_object_class_install_property(object_class,
+ PROP_BRIGHTNESS, filter_op->pspec);
+
+ /**
+ * GstVaapiPostproc:contrast:
+ *
+ * The color contrast, expressed as a float value. Range is 0.0 to
+ * 2.0. Default value is 1.0 and represents no modification.
+ */
+ filter_op = find_filter_op(filter_ops, GST_VAAPI_FILTER_OP_CONTRAST);
+ if (filter_op)
+ g_object_class_install_property(object_class,
+ PROP_CONTRAST, filter_op->pspec);
+
g_ptr_array_unref(filter_ops);
}
diff --git a/gst/vaapi/gstvaapipostproc.h b/gst/vaapi/gstvaapipostproc.h
index 93b4495..7159b53 100644
--- a/gst/vaapi/gstvaapipostproc.h
+++ b/gst/vaapi/gstvaapipostproc.h
@@ -160,6 +160,12 @@ struct _GstVaapiPostproc {
gfloat denoise_level;
gfloat sharpen_level;
+ /* Color balance filter values */
+ gfloat hue;
+ gfloat saturation;
+ gfloat brightness;
+ gfloat contrast;
+
guint is_raw_yuv : 1;
guint use_vpp : 1;
guint keep_aspect : 1;
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-gstreamer/gstreamer-vaapi.git
More information about the Pkg-gstreamer-commits
mailing list