static void
gst_gnome_vfs_src_set_property (GObject * object, guint prop_id,
    const GValue * value, GParamSpec * pspec)
{
  GstGnomeVFSSrc *src;

  src = GST_GNOME_VFS_SRC (object);

  switch (prop_id) {
    case ARG_LOCATION:{
      const gchar *new_location;

      /* the element must be stopped or paused in order to do this */
      if (GST_STATE (src) == GST_STATE_PLAYING ||
          GST_STATE (src) == GST_STATE_PAUSED)
        break;

      if (src->uri) {
        gnome_vfs_uri_unref (src->uri);
        src->uri = NULL;
      }
      if (src->uri_name) {
        g_free (src->uri_name);
        src->uri_name = NULL;
      }

      new_location = g_value_get_string (value);
      if (new_location) {
        src->uri_name = gst_gnome_vfs_location_to_uri_string (new_location);
        src->uri = gnome_vfs_uri_new (src->uri_name);
      }
      break;
    }
    case ARG_HANDLE:
      if (GST_STATE (src) == GST_STATE_NULL ||
          GST_STATE (src) == GST_STATE_READY) {
        if (src->uri) {
          gnome_vfs_uri_unref (src->uri);
          src->uri = NULL;
        }
        if (src->uri_name) {
          g_free (src->uri_name);
          src->uri_name = NULL;
        }
        src->handle = g_value_get_boxed (value);
      }
      break;
    case ARG_IRADIO_MODE:
      src->iradio_mode = g_value_get_boolean (value);
      break;
    default:
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
      break;
  }
}
static void
gst_gnome_vfs_sink_set_property (GObject * object, guint prop_id,
                                 const GValue * value, GParamSpec * pspec)
{
    GstGnomeVFSSink *sink;
    GstState cur_state;

    sink = GST_GNOME_VFS_SINK (object);

    gst_element_get_state (GST_ELEMENT (sink), &cur_state, NULL, 0);

    if (cur_state == GST_STATE_PLAYING || cur_state == GST_STATE_PAUSED) {
        GST_WARNING_OBJECT (sink, "cannot set property when PAUSED or PLAYING");
        return;
    }

    GST_OBJECT_LOCK (sink);

    switch (prop_id) {
    case ARG_LOCATION: {
        const gchar *new_location;

        if (sink->uri) {
            gnome_vfs_uri_unref (sink->uri);
            sink->uri = NULL;
        }
        if (sink->uri_name) {
            g_free (sink->uri_name);
            sink->uri_name = NULL;
        }

        new_location = g_value_get_string (value);
        if (new_location) {
            sink->uri_name = gst_gnome_vfs_location_to_uri_string (new_location);
            sink->uri = gnome_vfs_uri_new (sink->uri_name);
        }
        break;
    }
    case ARG_URI: {
        if (sink->uri) {
            gnome_vfs_uri_unref (sink->uri);
            sink->uri = NULL;
        }
        if (sink->uri_name) {
            g_free (sink->uri_name);
            sink->uri_name = NULL;
        }
        if (g_value_get_boxed (value)) {
            sink->uri = (GnomeVFSURI *) g_value_dup_boxed (value);
            sink->uri_name = gnome_vfs_uri_to_string (sink->uri, 0);
        }
        break;
    }
    case ARG_HANDLE: {
        if (sink->uri) {
            gnome_vfs_uri_unref (sink->uri);
            sink->uri = NULL;
        }
        if (sink->uri_name) {
            g_free (sink->uri_name);
            sink->uri_name = NULL;
        }
        sink->handle = g_value_get_boxed (value);
        break;
    }
    default:
        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
        break;
    }

    GST_OBJECT_UNLOCK (sink);
}