static GstInstallPluginsContext * gst_install_plugins_context_copy (GstInstallPluginsContext * ctx) { GstInstallPluginsContext *ret; ret = gst_install_plugins_context_new (); ret->xid = ctx->xid; return ret; }
GUniquePtr<GstInstallPluginsContext> PageClientImpl::createGstInstallPluginsContext() { #if PLATFORM(X11) if (PlatformDisplay::sharedDisplay().type() == PlatformDisplay::Type::X11) { GUniquePtr<GstInstallPluginsContext> context(gst_install_plugins_context_new()); gst_install_plugins_context_set_xid(context.get(), GDK_WINDOW_XID(gtk_widget_get_window(m_viewWidget))); return context; } #endif return nullptr; }
static gboolean bacon_video_widget_gst_on_missing_plugins_event (BaconVideoWidget *bvw, char **details, char **descriptions, gboolean playing, gpointer user_data) { GstInstallPluginsContext *install_ctx; TotemCodecInstallContext *ctx; GstInstallPluginsReturn status; guint i, num; #ifdef GDK_WINDOWING_X11 GdkDisplay *display; #endif num = g_strv_length (details); g_return_val_if_fail (num > 0 && g_strv_length (descriptions) == num, FALSE); ctx = g_new0 (TotemCodecInstallContext, 1); ctx->descriptions = g_strdupv (descriptions); ctx->details = g_strdupv (details); ctx->playing = playing; ctx->bvw = bvw; for (i = 0; i < num; ++i) { if (bacon_video_widget_gst_codec_install_plugin_is_blacklisted (ctx->details[i])) { g_message ("Missing plugin: %s (ignoring)", ctx->details[i]); g_free (ctx->details[i]); g_free (ctx->descriptions[i]); ctx->details[i] = ctx->details[num-1]; ctx->descriptions[i] = ctx->descriptions[num-1]; ctx->details[num-1] = NULL; ctx->descriptions[num-1] = NULL; --num; --i; } else { g_message ("Missing plugin: %s (%s)", ctx->details[i], ctx->descriptions[i]); } } if (num == 0) { g_message ("All missing plugins are blacklisted, doing nothing"); bacon_video_widget_gst_codec_install_context_free (ctx); return FALSE; } install_ctx = gst_install_plugins_context_new (); #ifdef GDK_WINDOWING_X11 display = gdk_display_get_default (); if (GDK_IS_X11_DISPLAY (display) && gtk_widget_get_window (GTK_WIDGET (bvw)) != NULL && gtk_widget_get_realized (GTK_WIDGET (bvw))) { gulong xid = 0; xid = bacon_video_widget_gst_get_toplevel (GTK_WIDGET (bvw)); gst_install_plugins_context_set_xid (install_ctx, xid); } #endif /* GDK_WINDOWING_X11 */ status = gst_install_plugins_async ((const char * const*) ctx->details, install_ctx, on_plugin_installation_done, ctx); gst_install_plugins_context_free (install_ctx); GST_INFO ("gst_install_plugins_async() result = %d", status); if (status != GST_INSTALL_PLUGINS_STARTED_OK) { if (status == GST_INSTALL_PLUGINS_HELPER_MISSING) { g_message ("Automatic missing codec installation not supported " "(helper script missing)"); } else { g_warning ("Failed to start codec installation: %s", gst_install_plugins_return_get_name (status)); } bacon_video_widget_gst_codec_install_context_free (ctx); return FALSE; } /* if we managed to start playing, pause playback, since some install * wizard should now take over in a second anyway and the user might not * be able to use totem's controls while the wizard is running */ if (playing) bacon_video_widget_pause (bvw); return TRUE; }
gboolean rb_missing_plugins_install (const char **details, gboolean ignore_blacklist, GClosure *closure) { RBPluginInstallContext *ctx; GstInstallPluginsContext *install_ctx; GstInstallPluginsReturn status; int i, num; num = g_strv_length ((char **)details); g_return_val_if_fail (num > 0, FALSE); ctx = g_new0 (RBPluginInstallContext, 1); ctx->closure = g_closure_ref (closure); ctx->details = g_strdupv ((char **)details); num = g_strv_length (ctx->details); for (i = 0; i < num; ++i) { if (ignore_blacklist == FALSE && rb_plugin_install_plugin_is_blacklisted (ctx->details[i])) { g_message ("Missing plugin: %s (ignoring)", ctx->details[i]); g_free (ctx->details[i]); ctx->details[i] = ctx->details[num-1]; ctx->details[num-1] = NULL; --num; --i; } else { g_message ("Missing plugin: %s", ctx->details[i]); } } if (num == 0) { g_message ("All missing plugins are blacklisted, doing nothing"); rb_plugin_install_context_free (ctx); return FALSE; } install_ctx = gst_install_plugins_context_new (); if (parent_window != NULL && gtk_widget_get_realized (GTK_WIDGET (parent_window))) { #ifdef GDK_WINDOWING_X11 gulong xid = 0; xid = gdk_x11_window_get_xid (gtk_widget_get_window (GTK_WIDGET (parent_window))); gst_install_plugins_context_set_xid (install_ctx, xid); #endif } status = gst_install_plugins_async (ctx->details, install_ctx, on_plugin_installation_done, ctx); gst_install_plugins_context_free (install_ctx); rb_debug ("gst_install_plugins_async() result = %d", status); if (status != GST_INSTALL_PLUGINS_STARTED_OK) { if (status == GST_INSTALL_PLUGINS_HELPER_MISSING) { g_message ("Automatic missing codec installation not supported " "(helper script missing)"); } else { g_warning ("Failed to start codec installation: %s", gst_install_plugins_return_get_name (status)); } rb_plugin_install_context_free (ctx); return FALSE; } return TRUE; }