rem: gboolean null_out, GError ** err)
add: BvwUseType type, GError ** err)
context: bacon_video_widget_new (int width, int height,			gboolean null_out, GError ** err){  BaconVideoWidget *bvw;  GstElement *audio_sink = NULL, *video_sink = NULL;  gulong sig1, sig2;  bvw = BACON_VIDEO_WIDGET (g_object_new                            (bacon_video_widget_get_type (), NULL));    bvw->priv->play = gst_element_factory_make ("playbin", "play");  if (!bvw->priv->play) {    g_set_error (err, bacon_video_widget_error_quark (),		 0, _("Failed to create a GStreamer play object"));    g_object_unref (G_OBJECT (bvw));    return NULL;  }    bvw->priv->media_device = g_strdup ("/dev/dvd");  bvw->priv->init_width = 240;  bvw->priv->init_height = 180;  bvw->priv->cursor_shown = TRUE;  bvw->priv->logo_mode = TRUE;  bvw->priv->auto_resize = TRUE;  if (!null_out) {    audio_sink = gst_gconf_get_default_audio_sink ();    if (!GST_IS_ELEMENT (audio_sink))      {        g_message ("failed to render default audio sink from gconf");        return NULL;      }    video_sink = gst_gconf_get_default_video_sink ();    if (!GST_IS_ELEMENT (video_sink))      {        g_message ("failed to render default video sink from gconf");        return NULL;      }  } else {    video_sink = gst_element_factory_make ("fakesink", "fakevideosink");    audio_sink = gst_element_factory_make ("fakesink", "fakeaudiosink");  }  sig1 = g_signal_connect (video_sink, "error", G_CALLBACK (out_error), err);  sig2 = g_signal_connect (audio_sink, "error", G_CALLBACK (out_error), err);  if (gst_element_set_state (video_sink,			     GST_STATE_READY) != GST_STATE_SUCCESS ||      gst_element_set_state (audio_sink,			     GST_STATE_READY) != GST_STATE_SUCCESS) {    if (err && !*err) {      g_set_error (err, 0, 0,		   "Failed to intialize %s output; check your configuration",		   GST_STATE (video_sink) == GST_STATE_NULL ?		   "video" : "audio");    }    gst_object_unref (GST_OBJECT (video_sink));    gst_object_unref (GST_OBJECT (audio_sink));    g_object_unref (G_OBJECT (bvw));    return NULL;  }  /* somehow, alsa hangs? */  gst_element_set_state (audio_sink, GST_STATE_NULL);  g_signal_handler_disconnect (video_sink, sig1);  g_signal_handler_disconnect (audio_sink, sig2);  g_object_set (G_OBJECT (bvw->priv->play), "video-sink",		video_sink, NULL);  g_object_set (G_OBJECT (bvw->priv->play), "audio-sink",		audio_sink, NULL);  bvw->priv->vis_plugins_list = NULL;  g_signal_connect (G_OBJECT (bvw->priv->play), "eos",		    (GtkSignalFunc) got_eos, (gpointer) bvw);  g_signal_connect (G_OBJECT (bvw->priv->play), "state-change",		    G_CALLBACK (state_change), (gpointer) bvw);  g_signal_connect (G_OBJECT (bvw->priv->play), "found_tag",		    G_CALLBACK (got_found_tag), (gpointer) bvw);  g_signal_connect (G_OBJECT (bvw->priv->play), "error",		    G_CALLBACK (got_error), (gpointer) bvw);  g_signal_connect (G_OBJECT (bvw->priv->play), "buffering",		    G_CALLBACK (got_buffering), (gpointer) bvw);  g_signal_connect (G_OBJECT (bvw->priv->play), "notify::source",		    G_CALLBACK (got_source), (gpointer) bvw);  /* We try to get an element supporting XOverlay interface */  if (!null_out && GST_IS_BIN (bvw->priv->play)) {    GstElement *element = NULL;    GList *elements = NULL, *l_elements = NULL;        element = gst_bin_get_by_interface (GST_BIN (video_sink),                                        GST_TYPE_X_OVERLAY);    if (GST_IS_X_OVERLAY (element))      bvw->priv->xoverlay = GST_X_OVERLAY (element);        g_signal_connect (G_OBJECT (bvw->priv->xoverlay),		      "desired-size-changed", G_CALLBACK (got_video_size),		      (gpointer) bvw);        /* Get them all and prefer hardware one */    elements = gst_bin_get_all_by_interface (GST_BIN (bvw->priv->play),                                             GST_TYPE_COLOR_BALANCE);    l_elements = elements;        /* We take the first one */    if (elements && GST_IS_COLOR_BALANCE (elements->data))      element = GST_ELEMENT (elements->data);        while (elements)      {        GstElement *local_element = NULL;        GstColorBalanceClass *cb_class = NULL;                if (elements->data && GST_IS_COLOR_BALANCE (elements->data))          {            local_element = GST_ELEMENT (elements->data);            cb_class = GST_COLOR_BALANCE_GET_CLASS (elements->data);                    /* If one of them is hardware type we use that one then */            if (GST_COLOR_BALANCE_TYPE (cb_class) == GST_COLOR_BALANCE_HARDWARE)              {                element = local_element;              }          }                  elements = g_list_next (elements);      }        if (l_elements)      g_list_free (l_elements);        elements = l_elements = NULL;        if (GST_IS_COLOR_BALANCE (element))      {        bvw->priv->balance = GST_COLOR_BALANCE (element);      }  }    return GTK_WIDGET (bvw);}