/* extracted from gst-launch */
static void
property_change_callback (GObject *object, GstObject *orig, GParamSpec *pspec)
{
  GValue value = { 0, }; /* the important thing is that value.type = 0 */
  gchar *str = 0;

  if (pspec->flags & G_PARAM_READABLE) {
    g_value_init(&value, G_PARAM_SPEC_VALUE_TYPE (pspec));
    g_object_get_property (G_OBJECT (orig), pspec->name, &value);
    /* fix current bug with g_strdup_value_contents not working with gint64 */
    if (G_IS_PARAM_SPEC_INT64 (pspec))
      str = g_strdup_printf ("%" G_GINT64_FORMAT, g_value_get_int64 (&value));
    else
      str = g_strdup_value_contents (&value);
    g_print ("%s: %s = %s\n", GST_OBJECT_NAME (orig), pspec->name, str);
    g_free (str);
    g_value_unset(&value);
  } else {
    g_warning ("Parameter not readable. What's up with that?");
  }
}