[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