static void gst_auto_audio_src_get_property (GObject * object, guint prop_id,
GValue * value, GParamSpec * pspec);
-GST_BOILERPLATE (GstAutoAudioSrc, gst_auto_audio_src, GstBin, GST_TYPE_BIN);
-
-static const GstElementDetails gst_auto_audio_src_details =
-GST_ELEMENT_DETAILS ("Auto audio source",
- "Source/Audio",
- "Wrapper audio source for automatically detected audio source",
- "Ronald Bultje <rbultje@ronald.bitfreak.net>\n"
- "Jan Schmidt <thaytan@noraisin.net>\n"
- "Stefan Kost <ensonic@users.sf.net>");
+#define gst_auto_audio_src_parent_class parent_class
+G_DEFINE_TYPE (GstAutoAudioSrc, gst_auto_audio_src, GST_TYPE_BIN);
static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_STATIC_CAPS_ANY);
static void
-gst_auto_audio_src_base_init (gpointer klass)
-{
- GstElementClass *eklass = GST_ELEMENT_CLASS (klass);
-
- gst_element_class_add_pad_template (eklass,
- gst_static_pad_template_get (&src_template));
-
- gst_element_class_set_details (eklass, &gst_auto_audio_src_details);
-}
-
-static void
gst_auto_audio_src_class_init (GstAutoAudioSrcClass * klass)
{
GObjectClass *gobject_class;
gobject_class = G_OBJECT_CLASS (klass);
eklass = GST_ELEMENT_CLASS (klass);
- gobject_class->dispose =
- (GObjectFinalizeFunc) GST_DEBUG_FUNCPTR (gst_auto_audio_src_dispose);
+ gobject_class->dispose = (GObjectFinalizeFunc) gst_auto_audio_src_dispose;
+ gobject_class->set_property = gst_auto_audio_src_set_property;
+ gobject_class->get_property = gst_auto_audio_src_get_property;
+
eklass->change_state = GST_DEBUG_FUNCPTR (gst_auto_audio_src_change_state);
- gobject_class->set_property =
- GST_DEBUG_FUNCPTR (gst_auto_audio_src_set_property);
- gobject_class->get_property =
- GST_DEBUG_FUNCPTR (gst_auto_audio_src_get_property);
/**
* GstAutoAudioSrc:filter-caps
*
* This property can only be set before the element goes to the READY state.
*
- * Since: 0.10.12
+ * Since: 0.10.14
**/
g_object_class_install_property (gobject_class, PROP_CAPS,
g_param_spec_boxed ("filter-caps", "Filter caps",
"Filter sink candidates using these caps.", GST_TYPE_CAPS,
- G_PARAM_READWRITE));
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ gst_element_class_add_pad_template (eklass,
+ gst_static_pad_template_get (&src_template));
+
+ gst_element_class_set_details_simple (eklass, "Auto audio source",
+ "Source/Audio",
+ "Wrapper audio source for automatically detected audio source",
+ "Jan Schmidt <thaytan@noraisin.net>, "
+ "Stefan Kost <ensonic@users.sf.net>");
}
static void
-gst_auto_audio_src_dispose (GstAutoAudioSrc * sink)
+gst_auto_audio_src_dispose (GstAutoAudioSrc * src)
{
- gst_auto_audio_src_clear_kid (sink);
+ gst_auto_audio_src_clear_kid (src);
- if (sink->filter_caps)
- gst_caps_unref (sink->filter_caps);
- sink->filter_caps = NULL;
+ if (src->filter_caps)
+ gst_caps_unref (src->filter_caps);
+ src->filter_caps = NULL;
- G_OBJECT_CLASS (parent_class)->dispose ((GObject *) sink);
+ G_OBJECT_CLASS (parent_class)->dispose ((GObject *) src);
}
static void
-gst_auto_audio_src_clear_kid (GstAutoAudioSrc * sink)
+gst_auto_audio_src_clear_kid (GstAutoAudioSrc * src)
{
- if (sink->kid) {
- gst_element_set_state (sink->kid, GST_STATE_NULL);
- gst_bin_remove (GST_BIN (sink), sink->kid);
- sink->kid = NULL;
+ if (src->kid) {
+ gst_element_set_state (src->kid, GST_STATE_NULL);
+ gst_bin_remove (GST_BIN (src), src->kid);
+ src->kid = NULL;
+
+ /* Don't lose SOURCE flag */
+ GST_OBJECT_FLAG_SET (src, GST_ELEMENT_IS_SOURCE);
}
}
GST_STATIC_CAPS ("audio/x-raw-int; audio/x-raw-float");
static void
-gst_auto_audio_src_init (GstAutoAudioSrc * src, GstAutoAudioSrcClass * g_class)
+gst_auto_audio_src_init (GstAutoAudioSrc * src)
{
src->pad = gst_ghost_pad_new_no_target ("src", GST_PAD_SRC);
gst_element_add_pad (GST_ELEMENT (src), src->pad);
src->filter_caps = gst_static_caps_get (&raw_caps);
/* mark as source */
- GST_OBJECT_FLAG_UNSET (src, GST_ELEMENT_IS_SINK);
+ GST_OBJECT_FLAG_SET (src, GST_ELEMENT_IS_SOURCE);
}
static gboolean
GstElement *element;
gchar *name, *marker;
- marker = g_strdup (GST_PLUGIN_FEATURE (factory)->name);
+ marker = g_strdup (GST_OBJECT_NAME (factory));
if (g_str_has_suffix (marker, "src"))
marker[strlen (marker) - 4] = '\0';
if (g_str_has_prefix (marker, "gst"))
GSList *errors = NULL;
GstBus *bus = gst_bus_new ();
GstPad *el_pad = NULL;
- GstCaps *el_caps = NULL, *intersect = NULL;
+ GstCaps *el_caps = NULL;
gboolean no_match = TRUE;
list = gst_registry_feature_filter (gst_registry_get_default (),
if ((el = gst_auto_audio_src_create_element_with_pretty_name (src, f))) {
GstStateChangeReturn ret;
- GST_DEBUG_OBJECT (src, "Testing %s", GST_PLUGIN_FEATURE (f)->name);
+ GST_DEBUG_OBJECT (src, "Testing %s", GST_OBJECT_NAME (f));
/* If autoAudioSrc has been provided with filter caps,
* accept only sources that match with the filter caps */
if (src->filter_caps) {
el_pad = gst_element_get_static_pad (GST_ELEMENT (el), "src");
- el_caps = gst_pad_get_caps (el_pad);
+ el_caps = gst_pad_get_caps (el_pad, NULL);
gst_object_unref (el_pad);
GST_DEBUG_OBJECT (src,
"Checking caps: %" GST_PTR_FORMAT " vs. %" GST_PTR_FORMAT,
src->filter_caps, el_caps);
- intersect = gst_caps_intersect (src->filter_caps, el_caps);
- no_match = gst_caps_is_empty (intersect);
+ no_match = !gst_caps_can_intersect (src->filter_caps, el_caps);
gst_caps_unref (el_caps);
- gst_caps_unref (intersect);
if (no_match) {
GST_DEBUG_OBJECT (src, "Incompatible caps");