From: Sreerenj Balachandran Date: Wed, 21 Mar 2018 14:45:35 +0000 (+0000) Subject: msdk: vpp: Add ProAmp(colorbalance) support X-Git-Tag: 1.19.3~507^2~4286 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=93c5dd2478c6e92928be9e6a7c8ee90e7c7dee65;p=platform%2Fupstream%2Fgstreamer.git msdk: vpp: Add ProAmp(colorbalance) support Added Hue, Saturation, Brightness and Contrast tuning support. Fixme: Add GstColorBalanceInterface support https://bugzilla.gnome.org/show_bug.cgi?id=793705 --- diff --git a/sys/msdk/gstmsdkvpp.c b/sys/msdk/gstmsdkvpp.c index 6b71e1e..6430de7 100644 --- a/sys/msdk/gstmsdkvpp.c +++ b/sys/msdk/gstmsdkvpp.c @@ -43,7 +43,6 @@ #include "gstmsdksystemmemory.h" #include "gstmsdkcontextutil.h" #include "gstmsdkvpputil.h" -#include "msdk-enums.h" GST_DEBUG_CATEGORY_EXTERN (gst_msdkvpp_debug); #define GST_CAT_DEFAULT gst_msdkvpp_debug @@ -71,6 +70,10 @@ enum PROP_ROTATION, PROP_DEINTERLACE_MODE, PROP_DEINTERLACE_METHOD, + PROP_HUE, + PROP_SATURATION, + PROP_BRIGHTNESS, + PROP_CONTRAST, PROP_N, }; @@ -80,6 +83,10 @@ enum #define PROP_ROTATION_DEFAULT MFX_ANGLE_0 #define PROP_DEINTERLACE_MODE_DEFAULT GST_MSDKVPP_DEINTERLACE_MODE_AUTO #define PROP_DEINTERLACE_METHOD_DEFAULT MFX_DEINTERLACING_BOB +#define PROP_HUE_DEFAULT 0 +#define PROP_SATURATION_DEFAULT 1 +#define PROP_BRIGHTNESS_DEFAULT 0 +#define PROP_CONTRAST_DEFAULT 1 #define gst_msdkvpp_parent_class parent_class G_DEFINE_TYPE (GstMsdkVPP, gst_msdkvpp, GST_TYPE_BASE_TRANSFORM); @@ -628,6 +635,21 @@ ensure_filters (GstMsdkVPP * thiz) n_filters++; } + /* Colorbalance(ProcAmp) */ + if (thiz->flags & (GST_MSDK_FLAG_HUE | GST_MSDK_FLAG_SATURATION | + GST_MSDK_FLAG_BRIGHTNESS | GST_MSDK_FLAG_CONTRAST)) { + mfxExtVPPProcAmp *mfx_procamp = &thiz->mfx_procamp; + mfx_procamp->Header.BufferId = MFX_EXTBUFF_VPP_PROCAMP; + mfx_procamp->Header.BufferSz = sizeof (mfxExtVPPProcAmp); + mfx_procamp->Hue = thiz->hue; + mfx_procamp->Saturation = thiz->saturation; + mfx_procamp->Brightness = thiz->brightness; + mfx_procamp->Contrast = thiz->contrast; + gst_msdkvpp_add_extra_param (thiz, (mfxExtBuffer *) mfx_procamp); + thiz->max_filter_algorithms[n_filters] = MFX_EXTBUFF_VPP_PROCAMP; + n_filters++; + } + /* mfxExtVPPDoUse */ if (n_filters) { mfxExtVPPDoUse *mfx_vpp_douse = &thiz->mfx_vpp_douse; @@ -915,6 +937,22 @@ gst_msdkvpp_set_property (GObject * object, guint prop_id, case PROP_DEINTERLACE_METHOD: thiz->deinterlace_method = g_value_get_enum (value); break; + case PROP_HUE: + thiz->hue = g_value_get_float (value); + thiz->flags |= GST_MSDK_FLAG_HUE; + break; + case PROP_SATURATION: + thiz->saturation = g_value_get_float (value); + thiz->flags |= GST_MSDK_FLAG_SATURATION; + break; + case PROP_BRIGHTNESS: + thiz->brightness = g_value_get_float (value); + thiz->flags |= GST_MSDK_FLAG_BRIGHTNESS; + break; + case PROP_CONTRAST: + thiz->contrast = g_value_get_float (value); + thiz->flags |= GST_MSDK_FLAG_CONTRAST; + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -946,6 +984,18 @@ gst_msdkvpp_get_property (GObject * object, guint prop_id, case PROP_DEINTERLACE_METHOD: g_value_set_enum (value, thiz->deinterlace_method); break; + case PROP_HUE: + g_value_set_float (value, thiz->hue); + break; + case PROP_SATURATION: + g_value_set_float (value, thiz->saturation); + break; + case PROP_BRIGHTNESS: + g_value_set_float (value, thiz->brightness); + break; + case PROP_CONTRAST: + g_value_set_float (value, thiz->contrast); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -1048,6 +1098,28 @@ gst_msdkvpp_class_init (GstMsdkVPPClass * klass) PROP_DEINTERLACE_METHOD_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + obj_properties[PROP_HUE] = + g_param_spec_float ("hue", "Hue", + "The hue of the video", + -180, 180, PROP_HUE_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + + obj_properties[PROP_SATURATION] = + g_param_spec_float ("saturation", "Saturation", + "The Saturation of the video", + 0, 10, PROP_SATURATION_DEFAULT, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + + obj_properties[PROP_BRIGHTNESS] = + g_param_spec_float ("brightness", "Brightness", + "The Brightness of the video", + -100, 100, PROP_BRIGHTNESS_DEFAULT, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + + obj_properties[PROP_CONTRAST] = + g_param_spec_float ("contrast", "Contrast", + "The Contrast of the video", + 0, 10, PROP_CONTRAST_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + g_object_class_install_properties (gobject_class, PROP_N, obj_properties); } @@ -1061,6 +1133,10 @@ gst_msdkvpp_init (GstMsdkVPP * thiz) thiz->deinterlace_mode = PROP_DEINTERLACE_MODE_DEFAULT; thiz->deinterlace_method = PROP_DEINTERLACE_METHOD_DEFAULT; thiz->field_duration = GST_CLOCK_TIME_NONE; + thiz->hue = PROP_HUE_DEFAULT; + thiz->saturation = PROP_SATURATION_DEFAULT; + thiz->brightness = PROP_BRIGHTNESS_DEFAULT; + thiz->contrast = PROP_CONTRAST_DEFAULT; gst_video_info_init (&thiz->sinkpad_info); gst_video_info_init (&thiz->srcpad_info); } diff --git a/sys/msdk/gstmsdkvpp.h b/sys/msdk/gstmsdkvpp.h index ca3d21a..85da266 100644 --- a/sys/msdk/gstmsdkvpp.h +++ b/sys/msdk/gstmsdkvpp.h @@ -33,12 +33,9 @@ #ifndef __GST_MSDKVPP_H__ #define __GST_MSDKVPP_H__ -#include -#include -#include -#include "msdk.h" #include "gstmsdkcontext.h" - +#include "msdk-enums.h" +#include G_BEGIN_DECLS #define GST_TYPE_MSDKVPP \ @@ -64,6 +61,10 @@ typedef enum { GST_MSDK_FLAG_DENOISE = 1 << 0, GST_MSDK_FLAG_ROTATION = 1 << 1, GST_MSDK_FLAG_DEINTERLACE = 1 << 2, + GST_MSDK_FLAG_HUE = 1 << 3, + GST_MSDK_FLAG_SATURATION = 1 << 4, + GST_MSDK_FLAG_BRIGHTNESS = 1 << 5, + GST_MSDK_FLAG_CONTRAST = 1 << 6, } GstMsdkVppFlags; struct _GstMsdkVPP @@ -102,6 +103,11 @@ struct _GstMsdkVPP guint rotation; guint deinterlace_mode; guint deinterlace_method; + gfloat hue; + gfloat saturation; + gfloat brightness; + gfloat contrast; + GstClockTime field_duration; /* MFX Filters */ @@ -110,6 +116,7 @@ struct _GstMsdkVPP mfxExtVPPDenoise mfx_denoise; mfxExtVPPRotation mfx_rotation; mfxExtVPPDeinterlacing mfx_deinterlace; + mfxExtVPPProcAmp mfx_procamp; /* Extended buffers */ mfxExtBuffer *extra_params[MAX_EXTRA_PARAMS];