#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
PROP_ROTATION,
PROP_DEINTERLACE_MODE,
PROP_DEINTERLACE_METHOD,
+ PROP_HUE,
+ PROP_SATURATION,
+ PROP_BRIGHTNESS,
+ PROP_CONTRAST,
PROP_N,
};
#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);
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;
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;
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;
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);
}
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);
}
#ifndef __GST_MSDKVPP_H__
#define __GST_MSDKVPP_H__
-#include <gst/gst.h>
-#include <gst/base/gstbasetransform.h>
-#include <gst/video/video.h>
-#include "msdk.h"
#include "gstmsdkcontext.h"
-
+#include "msdk-enums.h"
+#include <gst/base/gstbasetransform.h>
G_BEGIN_DECLS
#define GST_TYPE_MSDKVPP \
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
guint rotation;
guint deinterlace_mode;
guint deinterlace_method;
+ gfloat hue;
+ gfloat saturation;
+ gfloat brightness;
+ gfloat contrast;
+
GstClockTime field_duration;
/* MFX Filters */
mfxExtVPPDenoise mfx_denoise;
mfxExtVPPRotation mfx_rotation;
mfxExtVPPDeinterlacing mfx_deinterlace;
+ mfxExtVPPProcAmp mfx_procamp;
/* Extended buffers */
mfxExtBuffer *extra_params[MAX_EXTRA_PARAMS];