static void gst_auto_audio_sink_dispose (GstAutoAudioSink * sink) { gst_auto_audio_sink_clear_kid (sink); if (sink->filter_caps) gst_caps_unref (sink->filter_caps); sink->filter_caps = NULL; G_OBJECT_CLASS (parent_class)->dispose ((GObject *) sink); }
static gboolean gst_auto_audio_sink_detect (GstAutoAudioSink * sink) { GstElement *esink; GstPad *targetpad; gst_auto_audio_sink_clear_kid (sink); /* find element */ GST_DEBUG_OBJECT (sink, "Creating new kid"); if (!(esink = gst_auto_audio_sink_find_best (sink))) goto no_sink; g_object_set (G_OBJECT (esink), "ts-offset", sink->ts_offset, NULL); sink->kid = esink; /* Ensure the child is brought up to the right state to match the parent * although it's currently always in READY and * we're always doing NULL->READY. */ if (GST_STATE (sink->kid) < GST_STATE (sink)) gst_element_set_state (sink->kid, GST_STATE (sink)); gst_bin_add (GST_BIN (sink), esink); /* attach ghost pad */ GST_DEBUG_OBJECT (sink, "Re-assigning ghostpad"); targetpad = gst_element_get_static_pad (sink->kid, "sink"); if (!gst_ghost_pad_set_target (GST_GHOST_PAD (sink->pad), targetpad)) goto target_failed; gst_object_unref (targetpad); GST_DEBUG_OBJECT (sink, "done changing auto audio sink"); return TRUE; /* ERRORS */ no_sink: { GST_ELEMENT_ERROR (sink, LIBRARY, INIT, (NULL), ("Failed to find a supported audio sink")); return FALSE; } target_failed: { GST_ELEMENT_ERROR (sink, LIBRARY, INIT, (NULL), ("Failed to set target pad")); gst_object_unref (targetpad); return FALSE; } }
/* * Hack to make initial linking work; ideally, this'd work even when * no target has been assigned to the ghostpad yet. */ static void gst_auto_audio_sink_reset (GstAutoAudioSink * sink) { GstPad *targetpad; gst_auto_audio_sink_clear_kid (sink); /* fakesink placeholder */ sink->kid = gst_element_factory_make ("fakesink", "tempsink"); gst_bin_add (GST_BIN (sink), sink->kid); /* pad */ targetpad = gst_element_get_static_pad (sink->kid, "sink"); gst_ghost_pad_set_target (GST_GHOST_PAD (sink->pad), targetpad); gst_object_unref (targetpad); }