mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-03 16:09:39 +00:00
smptealpha: Some random cleanup
This commit is contained in:
parent
04a1b1dc48
commit
56d4230b22
2 changed files with 27 additions and 113 deletions
|
@ -77,12 +77,7 @@ static GstStaticPadTemplate gst_smpte_alpha_sink_template =
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
/* SMPTE signals and args */
|
/* SMPTE signals and properties */
|
||||||
enum
|
|
||||||
{
|
|
||||||
/* FILL ME */
|
|
||||||
LAST_SIGNAL
|
|
||||||
};
|
|
||||||
|
|
||||||
#define DEFAULT_PROP_TYPE 1
|
#define DEFAULT_PROP_TYPE 1
|
||||||
#define DEFAULT_PROP_BORDER 0
|
#define DEFAULT_PROP_BORDER 0
|
||||||
|
@ -139,9 +134,6 @@ gst_smpte_alpha_transition_type_get_type (void)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void gst_smpte_alpha_class_init (GstSMPTEAlphaClass * klass);
|
|
||||||
static void gst_smpte_alpha_base_init (GstSMPTEAlphaClass * klass);
|
|
||||||
static void gst_smpte_alpha_init (GstSMPTEAlpha * smpte);
|
|
||||||
static void gst_smpte_alpha_finalize (GstSMPTEAlpha * smpte);
|
static void gst_smpte_alpha_finalize (GstSMPTEAlpha * smpte);
|
||||||
|
|
||||||
static void gst_smpte_alpha_set_property (GObject * object, guint prop_id,
|
static void gst_smpte_alpha_set_property (GObject * object, guint prop_id,
|
||||||
|
@ -156,37 +148,11 @@ static gboolean gst_smpte_alpha_get_unit_size (GstBaseTransform * btrans,
|
||||||
static GstFlowReturn gst_smpte_alpha_transform (GstBaseTransform * trans,
|
static GstFlowReturn gst_smpte_alpha_transform (GstBaseTransform * trans,
|
||||||
GstBuffer * in, GstBuffer * out);
|
GstBuffer * in, GstBuffer * out);
|
||||||
|
|
||||||
static GstElementClass *parent_class = NULL;
|
GST_BOILERPLATE (GstSMPTEAlpha, gst_smpte_alpha, GstVideoFilter,
|
||||||
|
GST_TYPE_VIDEO_FILTER);
|
||||||
/*static guint gst_smpte_alpha_signals[LAST_SIGNAL] = { 0 }; */
|
|
||||||
|
|
||||||
static GType
|
|
||||||
gst_smpte_alpha_get_type (void)
|
|
||||||
{
|
|
||||||
static GType smpte_type = 0;
|
|
||||||
|
|
||||||
if (!smpte_type) {
|
|
||||||
static const GTypeInfo smpte_info = {
|
|
||||||
sizeof (GstSMPTEAlphaClass),
|
|
||||||
(GBaseInitFunc) gst_smpte_alpha_base_init,
|
|
||||||
NULL,
|
|
||||||
(GClassInitFunc) gst_smpte_alpha_class_init,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
sizeof (GstSMPTEAlpha),
|
|
||||||
0,
|
|
||||||
(GInstanceInitFunc) gst_smpte_alpha_init,
|
|
||||||
};
|
|
||||||
|
|
||||||
smpte_type =
|
|
||||||
g_type_register_static (GST_TYPE_VIDEO_FILTER, "GstSMPTEAlpha",
|
|
||||||
&smpte_info, 0);
|
|
||||||
}
|
|
||||||
return smpte_type;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_smpte_alpha_base_init (GstSMPTEAlphaClass * klass)
|
gst_smpte_alpha_base_init (gpointer klass)
|
||||||
{
|
{
|
||||||
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
|
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
|
||||||
|
|
||||||
|
@ -203,13 +169,8 @@ gst_smpte_alpha_base_init (GstSMPTEAlphaClass * klass)
|
||||||
static void
|
static void
|
||||||
gst_smpte_alpha_class_init (GstSMPTEAlphaClass * klass)
|
gst_smpte_alpha_class_init (GstSMPTEAlphaClass * klass)
|
||||||
{
|
{
|
||||||
GObjectClass *gobject_class;
|
GObjectClass *gobject_class = (GObjectClass *) klass;
|
||||||
GstBaseTransformClass *trans_class;
|
GstBaseTransformClass *trans_class = (GstBaseTransformClass *) klass;
|
||||||
|
|
||||||
gobject_class = (GObjectClass *) klass;
|
|
||||||
trans_class = (GstBaseTransformClass *) klass;
|
|
||||||
|
|
||||||
parent_class = g_type_class_peek_parent (klass);
|
|
||||||
|
|
||||||
gobject_class->set_property = gst_smpte_alpha_set_property;
|
gobject_class->set_property = gst_smpte_alpha_set_property;
|
||||||
gobject_class->get_property = gst_smpte_alpha_get_property;
|
gobject_class->get_property = gst_smpte_alpha_get_property;
|
||||||
|
@ -225,7 +186,8 @@ gst_smpte_alpha_class_init (GstSMPTEAlphaClass * klass)
|
||||||
g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_BORDER,
|
g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_BORDER,
|
||||||
g_param_spec_int ("border", "Border",
|
g_param_spec_int ("border", "Border",
|
||||||
"The border width of the transition", 0, G_MAXINT,
|
"The border width of the transition", 0, G_MAXINT,
|
||||||
DEFAULT_PROP_BORDER, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
DEFAULT_PROP_BORDER,
|
||||||
|
GST_PARAM_CONTROLLABLE | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_DEPTH,
|
g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_DEPTH,
|
||||||
g_param_spec_int ("depth", "Depth", "Depth of the mask in bits", 1, 24,
|
g_param_spec_int ("depth", "Depth", "Depth of the mask in bits", 1, 24,
|
||||||
DEFAULT_PROP_DEPTH, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
DEFAULT_PROP_DEPTH, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
|
@ -294,22 +256,12 @@ static gboolean
|
||||||
gst_smpte_alpha_setcaps (GstBaseTransform * btrans, GstCaps * incaps,
|
gst_smpte_alpha_setcaps (GstBaseTransform * btrans, GstCaps * incaps,
|
||||||
GstCaps * outcaps)
|
GstCaps * outcaps)
|
||||||
{
|
{
|
||||||
GstSMPTEAlpha *smpte;
|
GstSMPTEAlpha *smpte = GST_SMPTE_ALPHA (btrans);
|
||||||
GstStructure *structure;
|
|
||||||
gboolean ret;
|
gboolean ret;
|
||||||
gint width, height;
|
gint width, height;
|
||||||
guint32 fourcc;
|
|
||||||
|
|
||||||
smpte = GST_SMPTE_ALPHA (btrans);
|
if (!gst_video_format_parse_caps (incaps, &smpte->format, &width, &height))
|
||||||
|
goto invalid_caps;
|
||||||
structure = gst_caps_get_structure (incaps, 0);
|
|
||||||
|
|
||||||
/* see if we can get essential info */
|
|
||||||
ret = gst_structure_get_int (structure, "width", &width);
|
|
||||||
ret &= gst_structure_get_int (structure, "height", &height);
|
|
||||||
ret &= gst_structure_get_fourcc (structure, "format", &fourcc);
|
|
||||||
if (!ret)
|
|
||||||
goto no_dimensions;
|
|
||||||
|
|
||||||
/* try to update the mask now, this will also adjust the width/height on
|
/* try to update the mask now, this will also adjust the width/height on
|
||||||
* success */
|
* success */
|
||||||
|
@ -321,23 +273,12 @@ gst_smpte_alpha_setcaps (GstBaseTransform * btrans, GstCaps * incaps,
|
||||||
if (!ret)
|
if (!ret)
|
||||||
goto mask_failed;
|
goto mask_failed;
|
||||||
|
|
||||||
switch (fourcc) {
|
|
||||||
case GST_MAKE_FOURCC ('A', 'Y', 'U', 'V'):
|
|
||||||
smpte->format = GST_VIDEO_FORMAT_AYUV;
|
|
||||||
break;
|
|
||||||
case GST_MAKE_FOURCC ('I', '4', '2', '0'):
|
|
||||||
smpte->format = GST_VIDEO_FORMAT_I420;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
goto unsupported_fourcc;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
/* ERRORS */
|
/* ERRORS */
|
||||||
no_dimensions:
|
invalid_caps:
|
||||||
{
|
{
|
||||||
GST_ERROR_OBJECT (smpte, "no width, height and fourcc given");
|
GST_ERROR_OBJECT (smpte, "Invalid caps: %" GST_PTR_FORMAT, incaps);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
mask_failed:
|
mask_failed:
|
||||||
|
@ -345,48 +286,25 @@ mask_failed:
|
||||||
GST_ERROR_OBJECT (smpte, "failed creating the mask");
|
GST_ERROR_OBJECT (smpte, "failed creating the mask");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
unsupported_fourcc:
|
|
||||||
{
|
|
||||||
GST_ERROR_OBJECT (smpte, "unsupported fourcc %" GST_FOURCC_FORMAT,
|
|
||||||
GST_FOURCC_ARGS (fourcc));
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
gst_smpte_alpha_get_unit_size (GstBaseTransform * btrans, GstCaps * caps,
|
gst_smpte_alpha_get_unit_size (GstBaseTransform * btrans, GstCaps * caps,
|
||||||
guint * size)
|
guint * size)
|
||||||
{
|
{
|
||||||
GstStructure *structure;
|
|
||||||
gboolean ret;
|
|
||||||
gint width, height;
|
gint width, height;
|
||||||
guint32 fourcc;
|
GstVideoFormat format;
|
||||||
|
|
||||||
structure = gst_caps_get_structure (caps, 0);
|
if (!gst_video_format_parse_caps (caps, &format, &width, &height))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
ret = gst_structure_get_int (structure, "width", &width);
|
*size = gst_video_format_get_size (format, width, height);
|
||||||
ret &= gst_structure_get_int (structure, "height", &height);
|
|
||||||
ret &= gst_structure_get_fourcc (structure, "format", &fourcc);
|
return TRUE;
|
||||||
if (ret) {
|
|
||||||
switch (fourcc) {
|
|
||||||
case GST_MAKE_FOURCC ('A', 'Y', 'U', 'V'):
|
|
||||||
*size =
|
|
||||||
gst_video_format_get_size (GST_VIDEO_FORMAT_AYUV, width, height);
|
|
||||||
break;
|
|
||||||
case GST_MAKE_FOURCC ('I', '4', '2', '0'):
|
|
||||||
*size =
|
|
||||||
gst_video_format_get_size (GST_VIDEO_FORMAT_I420, width, height);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
ret = FALSE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_smpte_alpha_init (GstSMPTEAlpha * smpte)
|
gst_smpte_alpha_init (GstSMPTEAlpha * smpte, GstSMPTEAlphaClass * klass)
|
||||||
{
|
{
|
||||||
smpte->type = DEFAULT_PROP_TYPE;
|
smpte->type = DEFAULT_PROP_TYPE;
|
||||||
smpte->border = DEFAULT_PROP_BORDER;
|
smpte->border = DEFAULT_PROP_BORDER;
|
||||||
|
@ -400,6 +318,7 @@ gst_smpte_alpha_finalize (GstSMPTEAlpha * smpte)
|
||||||
{
|
{
|
||||||
if (smpte->mask)
|
if (smpte->mask)
|
||||||
gst_mask_destroy (smpte->mask);
|
gst_mask_destroy (smpte->mask);
|
||||||
|
smpte->mask = NULL;
|
||||||
|
|
||||||
G_OBJECT_CLASS (parent_class)->finalize ((GObject *) smpte);
|
G_OBJECT_CLASS (parent_class)->finalize ((GObject *) smpte);
|
||||||
}
|
}
|
||||||
|
@ -511,13 +430,11 @@ static GstFlowReturn
|
||||||
gst_smpte_alpha_transform (GstBaseTransform * trans, GstBuffer * in,
|
gst_smpte_alpha_transform (GstBaseTransform * trans, GstBuffer * in,
|
||||||
GstBuffer * out)
|
GstBuffer * out)
|
||||||
{
|
{
|
||||||
GstSMPTEAlpha *smpte;
|
GstSMPTEAlpha *smpte = GST_SMPTE_ALPHA (trans);
|
||||||
GstClockTime timestamp, stream_time;
|
GstClockTime timestamp, stream_time;
|
||||||
gdouble position;
|
gdouble position;
|
||||||
gint border;
|
gint border;
|
||||||
|
|
||||||
smpte = GST_SMPTE_ALPHA (trans);
|
|
||||||
|
|
||||||
/* first sync the controller to the current stream_time of the buffer */
|
/* first sync the controller to the current stream_time of the buffer */
|
||||||
timestamp = GST_BUFFER_TIMESTAMP (in);
|
timestamp = GST_BUFFER_TIMESTAMP (in);
|
||||||
stream_time =
|
stream_time =
|
||||||
|
@ -569,9 +486,7 @@ static void
|
||||||
gst_smpte_alpha_set_property (GObject * object, guint prop_id,
|
gst_smpte_alpha_set_property (GObject * object, guint prop_id,
|
||||||
const GValue * value, GParamSpec * pspec)
|
const GValue * value, GParamSpec * pspec)
|
||||||
{
|
{
|
||||||
GstSMPTEAlpha *smpte;
|
GstSMPTEAlpha *smpte = GST_SMPTE_ALPHA (object);
|
||||||
|
|
||||||
smpte = GST_SMPTE_ALPHA (object);
|
|
||||||
|
|
||||||
switch (prop_id) {
|
switch (prop_id) {
|
||||||
case PROP_TYPE:{
|
case PROP_TYPE:{
|
||||||
|
@ -580,12 +495,10 @@ gst_smpte_alpha_set_property (GObject * object, guint prop_id,
|
||||||
type = g_value_get_enum (value);
|
type = g_value_get_enum (value);
|
||||||
|
|
||||||
GST_BASE_TRANSFORM_LOCK (smpte);
|
GST_BASE_TRANSFORM_LOCK (smpte);
|
||||||
/* also lock with the object lock so that reading the property doesn't
|
|
||||||
* have to wait for the transform lock */
|
|
||||||
GST_OBJECT_LOCK (smpte);
|
GST_OBJECT_LOCK (smpte);
|
||||||
GST_OBJECT_UNLOCK (smpte);
|
|
||||||
gst_smpte_alpha_update_mask (smpte, type, smpte->invert,
|
gst_smpte_alpha_update_mask (smpte, type, smpte->invert,
|
||||||
smpte->depth, smpte->width, smpte->height);
|
smpte->depth, smpte->width, smpte->height);
|
||||||
|
GST_OBJECT_UNLOCK (smpte);
|
||||||
GST_BASE_TRANSFORM_UNLOCK (smpte);
|
GST_BASE_TRANSFORM_UNLOCK (smpte);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -603,9 +516,9 @@ gst_smpte_alpha_set_property (GObject * object, guint prop_id,
|
||||||
/* also lock with the object lock so that reading the property doesn't
|
/* also lock with the object lock so that reading the property doesn't
|
||||||
* have to wait for the transform lock */
|
* have to wait for the transform lock */
|
||||||
GST_OBJECT_LOCK (smpte);
|
GST_OBJECT_LOCK (smpte);
|
||||||
GST_OBJECT_UNLOCK (smpte);
|
|
||||||
gst_smpte_alpha_update_mask (smpte, smpte->type, smpte->invert,
|
gst_smpte_alpha_update_mask (smpte, smpte->type, smpte->invert,
|
||||||
depth, smpte->width, smpte->height);
|
depth, smpte->width, smpte->height);
|
||||||
|
GST_OBJECT_UNLOCK (smpte);
|
||||||
GST_BASE_TRANSFORM_UNLOCK (smpte);
|
GST_BASE_TRANSFORM_UNLOCK (smpte);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -622,9 +535,9 @@ gst_smpte_alpha_set_property (GObject * object, guint prop_id,
|
||||||
/* also lock with the object lock so that reading the property doesn't
|
/* also lock with the object lock so that reading the property doesn't
|
||||||
* have to wait for the transform lock */
|
* have to wait for the transform lock */
|
||||||
GST_OBJECT_LOCK (smpte);
|
GST_OBJECT_LOCK (smpte);
|
||||||
GST_OBJECT_UNLOCK (smpte);
|
|
||||||
gst_smpte_alpha_update_mask (smpte, smpte->type, invert,
|
gst_smpte_alpha_update_mask (smpte, smpte->type, invert,
|
||||||
smpte->depth, smpte->width, smpte->height);
|
smpte->depth, smpte->width, smpte->height);
|
||||||
|
GST_OBJECT_UNLOCK (smpte);
|
||||||
GST_BASE_TRANSFORM_UNLOCK (smpte);
|
GST_BASE_TRANSFORM_UNLOCK (smpte);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -67,6 +67,7 @@ struct _GstSMPTEAlphaClass {
|
||||||
GstVideoFilterClass parent_class;
|
GstVideoFilterClass parent_class;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
GType gst_smpte_alpha_get_type (void);
|
||||||
gboolean gst_smpte_alpha_plugin_init (GstPlugin * plugin);
|
gboolean gst_smpte_alpha_plugin_init (GstPlugin * plugin);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
Loading…
Reference in a new issue