msdk: vpp: Add support for horizontal and vertical mirroring
https://bugzilla.gnome.org/show_bug.cgi?id=793705
This commit is contained in:
parent
108c8fde7f
commit
51b6345dc4
@ -75,6 +75,7 @@ enum
|
|||||||
PROP_BRIGHTNESS,
|
PROP_BRIGHTNESS,
|
||||||
PROP_CONTRAST,
|
PROP_CONTRAST,
|
||||||
PROP_DETAIL,
|
PROP_DETAIL,
|
||||||
|
PROP_MIRRORING,
|
||||||
PROP_N,
|
PROP_N,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -89,6 +90,7 @@ enum
|
|||||||
#define PROP_BRIGHTNESS_DEFAULT 0
|
#define PROP_BRIGHTNESS_DEFAULT 0
|
||||||
#define PROP_CONTRAST_DEFAULT 1
|
#define PROP_CONTRAST_DEFAULT 1
|
||||||
#define PROP_DETAIL_DEFAULT 0
|
#define PROP_DETAIL_DEFAULT 0
|
||||||
|
#define PROP_MIRRORING_DEFAULT MFX_MIRRORING_DISABLED
|
||||||
|
|
||||||
#define gst_msdkvpp_parent_class parent_class
|
#define gst_msdkvpp_parent_class parent_class
|
||||||
G_DEFINE_TYPE (GstMsdkVPP, gst_msdkvpp, GST_TYPE_BASE_TRANSFORM);
|
G_DEFINE_TYPE (GstMsdkVPP, gst_msdkvpp, GST_TYPE_BASE_TRANSFORM);
|
||||||
@ -672,6 +674,17 @@ ensure_filters (GstMsdkVPP * thiz)
|
|||||||
mfx_vpp_douse->AlgList = thiz->max_filter_algorithms;
|
mfx_vpp_douse->AlgList = thiz->max_filter_algorithms;
|
||||||
gst_msdkvpp_add_extra_param (thiz, (mfxExtBuffer *) mfx_vpp_douse);
|
gst_msdkvpp_add_extra_param (thiz, (mfxExtBuffer *) mfx_vpp_douse);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Mirroring */
|
||||||
|
if (thiz->flags & GST_MSDK_FLAG_MIRRORING) {
|
||||||
|
mfxExtVPPMirroring *mfx_mirroring = &thiz->mfx_mirroring;
|
||||||
|
mfx_mirroring->Header.BufferId = MFX_EXTBUFF_VPP_MIRRORING;
|
||||||
|
mfx_mirroring->Header.BufferSz = sizeof (mfxExtVPPMirroring);
|
||||||
|
mfx_mirroring->Type = thiz->mirroring;
|
||||||
|
gst_msdkvpp_add_extra_param (thiz, (mfxExtBuffer *) mfx_mirroring);
|
||||||
|
thiz->max_filter_algorithms[n_filters] = MFX_EXTBUFF_VPP_MIRRORING;
|
||||||
|
n_filters++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -970,6 +983,10 @@ gst_msdkvpp_set_property (GObject * object, guint prop_id,
|
|||||||
thiz->detail = g_value_get_uint (value);
|
thiz->detail = g_value_get_uint (value);
|
||||||
thiz->flags |= GST_MSDK_FLAG_DETAIL;
|
thiz->flags |= GST_MSDK_FLAG_DETAIL;
|
||||||
break;
|
break;
|
||||||
|
case PROP_MIRRORING:
|
||||||
|
thiz->mirroring = g_value_get_enum (value);
|
||||||
|
thiz->flags |= GST_MSDK_FLAG_MIRRORING;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
@ -1016,6 +1033,9 @@ gst_msdkvpp_get_property (GObject * object, guint prop_id,
|
|||||||
case PROP_DETAIL:
|
case PROP_DETAIL:
|
||||||
g_value_set_uint (value, thiz->detail);
|
g_value_set_uint (value, thiz->detail);
|
||||||
break;
|
break;
|
||||||
|
case PROP_MIRRORING:
|
||||||
|
g_value_set_enum (value, thiz->mirroring);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
@ -1145,6 +1165,11 @@ gst_msdkvpp_class_init (GstMsdkVPPClass * klass)
|
|||||||
"The factor of detail/edge enhancement filter algorithm",
|
"The factor of detail/edge enhancement filter algorithm",
|
||||||
0, 100, PROP_DETAIL_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
|
0, 100, PROP_DETAIL_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
|
||||||
|
|
||||||
|
obj_properties[PROP_MIRRORING] =
|
||||||
|
g_param_spec_enum ("mirroring", "Mirroring",
|
||||||
|
"The Mirroring type", gst_msdkvpp_mirroring_get_type (),
|
||||||
|
PROP_MIRRORING_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
|
||||||
|
|
||||||
g_object_class_install_properties (gobject_class, PROP_N, obj_properties);
|
g_object_class_install_properties (gobject_class, PROP_N, obj_properties);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1163,6 +1188,7 @@ gst_msdkvpp_init (GstMsdkVPP * thiz)
|
|||||||
thiz->brightness = PROP_BRIGHTNESS_DEFAULT;
|
thiz->brightness = PROP_BRIGHTNESS_DEFAULT;
|
||||||
thiz->contrast = PROP_CONTRAST_DEFAULT;
|
thiz->contrast = PROP_CONTRAST_DEFAULT;
|
||||||
thiz->detail = PROP_DETAIL_DEFAULT;
|
thiz->detail = PROP_DETAIL_DEFAULT;
|
||||||
|
thiz->mirroring = PROP_MIRRORING_DEFAULT;
|
||||||
gst_video_info_init (&thiz->sinkpad_info);
|
gst_video_info_init (&thiz->sinkpad_info);
|
||||||
gst_video_info_init (&thiz->srcpad_info);
|
gst_video_info_init (&thiz->srcpad_info);
|
||||||
}
|
}
|
||||||
|
@ -66,6 +66,7 @@ typedef enum {
|
|||||||
GST_MSDK_FLAG_BRIGHTNESS = 1 << 5,
|
GST_MSDK_FLAG_BRIGHTNESS = 1 << 5,
|
||||||
GST_MSDK_FLAG_CONTRAST = 1 << 6,
|
GST_MSDK_FLAG_CONTRAST = 1 << 6,
|
||||||
GST_MSDK_FLAG_DETAIL = 1 << 7,
|
GST_MSDK_FLAG_DETAIL = 1 << 7,
|
||||||
|
GST_MSDK_FLAG_MIRRORING = 1 << 8,
|
||||||
} GstMsdkVppFlags;
|
} GstMsdkVppFlags;
|
||||||
|
|
||||||
struct _GstMsdkVPP
|
struct _GstMsdkVPP
|
||||||
@ -109,6 +110,7 @@ struct _GstMsdkVPP
|
|||||||
gfloat brightness;
|
gfloat brightness;
|
||||||
gfloat contrast;
|
gfloat contrast;
|
||||||
guint detail;
|
guint detail;
|
||||||
|
guint mirroring;
|
||||||
|
|
||||||
GstClockTime field_duration;
|
GstClockTime field_duration;
|
||||||
|
|
||||||
@ -120,6 +122,7 @@ struct _GstMsdkVPP
|
|||||||
mfxExtVPPDeinterlacing mfx_deinterlace;
|
mfxExtVPPDeinterlacing mfx_deinterlace;
|
||||||
mfxExtVPPProcAmp mfx_procamp;
|
mfxExtVPPProcAmp mfx_procamp;
|
||||||
mfxExtVPPDetail mfx_detail;
|
mfxExtVPPDetail mfx_detail;
|
||||||
|
mfxExtVPPMirroring mfx_mirroring;
|
||||||
|
|
||||||
/* Extended buffers */
|
/* Extended buffers */
|
||||||
mfxExtBuffer *extra_params[MAX_EXTRA_PARAMS];
|
mfxExtBuffer *extra_params[MAX_EXTRA_PARAMS];
|
||||||
|
@ -242,3 +242,21 @@ gst_msdkvpp_deinterlace_method_get_type (void)
|
|||||||
}
|
}
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GType
|
||||||
|
gst_msdkvpp_mirroring_get_type (void)
|
||||||
|
{
|
||||||
|
static GType type = 0;
|
||||||
|
|
||||||
|
static const GEnumValue values[] = {
|
||||||
|
{MFX_MIRRORING_DISABLED, "Disable mirroring", "disable"},
|
||||||
|
{MFX_MIRRORING_HORIZONTAL, "Horizontal Mirroring", "horizontal"},
|
||||||
|
{MFX_MIRRORING_VERTICAL, "Vertical Mirroring", "vertical"},
|
||||||
|
{0, NULL, NULL}
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!type) {
|
||||||
|
type = g_enum_register_static ("GstMsdkVPPMirroring", values);
|
||||||
|
}
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
@ -78,5 +78,8 @@ gst_msdkvpp_deinterlace_mode_get_type (void);
|
|||||||
GType
|
GType
|
||||||
gst_msdkvpp_deinterlace_method_get_type (void);
|
gst_msdkvpp_deinterlace_method_get_type (void);
|
||||||
|
|
||||||
|
GType
|
||||||
|
gst_msdkvpp_mirroring_get_type (void);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user