+2003-12-24 Colin Walters <walters@verbum.org>
+
+ * gst/elements/gsttypefindelement.c:
+ gst/elements/gsttypefindelement.h: Make GstCaps parameter const.
+ Copy caps parameter. Use _POINTER to marshal caps instead of _BOXED.
+ Don't double-free caps.
+
2003-12-23 David Schleef <ds@schleef.org>
* gst/gstelement.c, gst/gstpad.c, gst/parse/grammar.y,
return typefind_type;
}
static void
-gst_type_find_element_have_type (GstTypeFindElement *typefind, guint probability, GstCaps *caps)
+gst_type_find_element_have_type (GstTypeFindElement *typefind, guint probability, const GstCaps *caps)
{
gchar *caps_str;
caps_str = gst_caps_to_string (caps);
GST_INFO_OBJECT (typefind, "found caps %s", caps_str);
g_free (caps_str);
- gst_caps_replace (&typefind->caps, caps);
+ typefind->caps = gst_caps_copy (caps);
if (gst_pad_try_set_caps (typefind->src, caps) < GST_PAD_LINK_OK) {
gst_element_error (GST_ELEMENT (typefind), "could not set caps on source pad");
}
gst_type_find_element_signals[HAVE_TYPE] = g_signal_new ("have_type",
G_TYPE_FROM_CLASS (g_class), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GstTypeFindElementClass, have_type), NULL, NULL,
- gst_marshal_VOID__UINT_BOXED, G_TYPE_NONE, 2,
- G_TYPE_UINT, gst_caps_get_type());
+ gst_marshal_VOID__UINT_POINTER, G_TYPE_NONE, 2,
+ G_TYPE_UINT, G_TYPE_POINTER);
gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_type_find_element_change_state);
}
break;
case GST_STATE_PAUSED_TO_READY:
stop_typefinding (typefind);
- gst_caps_replace (&typefind->caps, NULL);
+ if (typefind->caps)
+ gst_caps_free (typefind->caps);
break;
default:
break;
/* signals */
void (*have_type) (GstTypeFindElement *element,
guint probability,
- GstCaps * caps);
+ const GstCaps * caps);
};
GType gst_type_find_element_get_type (void);
return typefind_type;
}
static void
-gst_type_find_element_have_type (GstTypeFindElement *typefind, guint probability, GstCaps *caps)
+gst_type_find_element_have_type (GstTypeFindElement *typefind, guint probability, const GstCaps *caps)
{
gchar *caps_str;
caps_str = gst_caps_to_string (caps);
GST_INFO_OBJECT (typefind, "found caps %s", caps_str);
g_free (caps_str);
- gst_caps_replace (&typefind->caps, caps);
+ typefind->caps = gst_caps_copy (caps);
if (gst_pad_try_set_caps (typefind->src, caps) < GST_PAD_LINK_OK) {
gst_element_error (GST_ELEMENT (typefind), "could not set caps on source pad");
}
gst_type_find_element_signals[HAVE_TYPE] = g_signal_new ("have_type",
G_TYPE_FROM_CLASS (g_class), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GstTypeFindElementClass, have_type), NULL, NULL,
- gst_marshal_VOID__UINT_BOXED, G_TYPE_NONE, 2,
- G_TYPE_UINT, gst_caps_get_type());
+ gst_marshal_VOID__UINT_POINTER, G_TYPE_NONE, 2,
+ G_TYPE_UINT, G_TYPE_POINTER);
gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_type_find_element_change_state);
}
break;
case GST_STATE_PAUSED_TO_READY:
stop_typefinding (typefind);
- gst_caps_replace (&typefind->caps, NULL);
+ if (typefind->caps)
+ gst_caps_free (typefind->caps);
break;
default:
break;
/* signals */
void (*have_type) (GstTypeFindElement *element,
guint probability,
- GstCaps * caps);
+ const GstCaps * caps);
};
GType gst_type_find_element_get_type (void);
VOID:INT,INT
VOID:INT64
VOID:UINT,BOXED
+VOID:UINT,POINTER
BOOLEAN:VOID
BOOLEAN:POINTER
return typefind_type;
}
static void
-gst_type_find_element_have_type (GstTypeFindElement *typefind, guint probability, GstCaps *caps)
+gst_type_find_element_have_type (GstTypeFindElement *typefind, guint probability, const GstCaps *caps)
{
gchar *caps_str;
caps_str = gst_caps_to_string (caps);
GST_INFO_OBJECT (typefind, "found caps %s", caps_str);
g_free (caps_str);
- gst_caps_replace (&typefind->caps, caps);
+ typefind->caps = gst_caps_copy (caps);
if (gst_pad_try_set_caps (typefind->src, caps) < GST_PAD_LINK_OK) {
gst_element_error (GST_ELEMENT (typefind), "could not set caps on source pad");
}
gst_type_find_element_signals[HAVE_TYPE] = g_signal_new ("have_type",
G_TYPE_FROM_CLASS (g_class), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GstTypeFindElementClass, have_type), NULL, NULL,
- gst_marshal_VOID__UINT_BOXED, G_TYPE_NONE, 2,
- G_TYPE_UINT, gst_caps_get_type());
+ gst_marshal_VOID__UINT_POINTER, G_TYPE_NONE, 2,
+ G_TYPE_UINT, G_TYPE_POINTER);
gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_type_find_element_change_state);
}
break;
case GST_STATE_PAUSED_TO_READY:
stop_typefinding (typefind);
- gst_caps_replace (&typefind->caps, NULL);
+ if (typefind->caps)
+ gst_caps_free (typefind->caps);
break;
default:
break;
/* signals */
void (*have_type) (GstTypeFindElement *element,
guint probability,
- GstCaps * caps);
+ const GstCaps * caps);
};
GType gst_type_find_element_get_type (void);
return typefind_type;
}
static void
-gst_type_find_element_have_type (GstTypeFindElement *typefind, guint probability, GstCaps *caps)
+gst_type_find_element_have_type (GstTypeFindElement *typefind, guint probability, const GstCaps *caps)
{
gchar *caps_str;
caps_str = gst_caps_to_string (caps);
GST_INFO_OBJECT (typefind, "found caps %s", caps_str);
g_free (caps_str);
- gst_caps_replace (&typefind->caps, caps);
+ typefind->caps = gst_caps_copy (caps);
if (gst_pad_try_set_caps (typefind->src, caps) < GST_PAD_LINK_OK) {
gst_element_error (GST_ELEMENT (typefind), "could not set caps on source pad");
}
gst_type_find_element_signals[HAVE_TYPE] = g_signal_new ("have_type",
G_TYPE_FROM_CLASS (g_class), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GstTypeFindElementClass, have_type), NULL, NULL,
- gst_marshal_VOID__UINT_BOXED, G_TYPE_NONE, 2,
- G_TYPE_UINT, gst_caps_get_type());
+ gst_marshal_VOID__UINT_POINTER, G_TYPE_NONE, 2,
+ G_TYPE_UINT, G_TYPE_POINTER);
gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_type_find_element_change_state);
}
break;
case GST_STATE_PAUSED_TO_READY:
stop_typefinding (typefind);
- gst_caps_replace (&typefind->caps, NULL);
+ if (typefind->caps)
+ gst_caps_free (typefind->caps);
break;
default:
break;
/* signals */
void (*have_type) (GstTypeFindElement *element,
guint probability,
- GstCaps * caps);
+ const GstCaps * caps);
};
GType gst_type_find_element_get_type (void);