static void gst_play_sink_convert_bin_init (GstPlaySinkConvertBin * self) { GstPadTemplate *templ; g_mutex_init (&self->lock); templ = gst_static_pad_template_get (&sinktemplate); self->sinkpad = gst_ghost_pad_new_no_target_from_template ("sink", templ); gst_pad_set_event_function (self->sinkpad, GST_DEBUG_FUNCPTR (gst_play_sink_convert_bin_sink_event)); gst_pad_set_query_function (self->sinkpad, GST_DEBUG_FUNCPTR (gst_play_sink_convert_bin_query)); self->sink_proxypad = GST_PAD_CAST (gst_proxy_pad_get_internal (GST_PROXY_PAD (self->sinkpad))); gst_element_add_pad (GST_ELEMENT_CAST (self), self->sinkpad); gst_object_unref (templ); templ = gst_static_pad_template_get (&srctemplate); self->srcpad = gst_ghost_pad_new_no_target_from_template ("src", templ); gst_pad_set_query_function (self->srcpad, GST_DEBUG_FUNCPTR (gst_play_sink_convert_bin_query)); gst_element_add_pad (GST_ELEMENT_CAST (self), self->srcpad); gst_object_unref (templ); gst_play_sink_convert_bin_add_identity (self); }
static void gst_play_sink_audio_convert_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) { GstPlaySinkAudioConvert *self = GST_PLAY_SINK_AUDIO_CONVERT_CAST (object); gboolean v, changed = FALSE; GST_PLAY_SINK_CONVERT_BIN_LOCK (self); switch (prop_id) { case PROP_USE_CONVERTERS: v = g_value_get_boolean (value); if (v != self->use_converters) { self->use_converters = v; changed = TRUE; } break; case PROP_USE_VOLUME: v = g_value_get_boolean (value); if (v != self->use_volume) { self->use_volume = v; changed = TRUE; } break; default: break; } if (changed) { GstPlaySinkConvertBin *cbin = GST_PLAY_SINK_CONVERT_BIN (self); GST_DEBUG_OBJECT (self, "Rebuilding converter bin"); gst_play_sink_convert_bin_remove_elements (cbin); gst_play_sink_audio_convert_add_conversion_elements (self); gst_play_sink_convert_bin_add_identity (cbin); gst_play_sink_convert_bin_cache_converter_caps (cbin); } GST_PLAY_SINK_CONVERT_BIN_UNLOCK (self); }