Updating branch refs/heads/master to e4203a6d47ae5f7fa3107b081d27a07ce36d04fc (commit) from 352c5262b129161d5b8d55d9a056087d9d36ae53 (commit)
commit e4203a6d47ae5f7fa3107b081d27a07ce36d04fc Author: Sean Davis <smd.seanda...@gmail.com> Date: Tue Jan 8 12:50:43 2013 -0500 Initial port to gstreamer 1.0 -- still broken. configure.ac.in | 31 +++++++-- src/gst/parole-gst.c | 175 +++++++++++++++++++++++++++++++++++++++------- src/parole-conf-dialog.c | 12 +++ src/parole-vis.c | 4 + 4 files changed, 192 insertions(+), 30 deletions(-) diff --git a/configure.ac.in b/configure.ac.in index f0b6922..0072b3d 100644 --- a/configure.ac.in +++ b/configure.ac.in @@ -75,6 +75,26 @@ AC_CHECK_HEADERS([errno.h signal.h stddef.h sys/ioctl.h fcntl.h\ XDT_I18N([@LINGUAS@]) +dnl gstreamer version +AC_ARG_WITH([gstreamer], + [AS_HELP_STRING([--with-gstreamer=0.10|1.0],[which gstreamer version to compile against (default: 0.10)])], + [case "$with_gstreamer" in + 0.10|1.0) ;; + *) AC_MSG_ERROR([invalid gstreamer version specified]) ;; + esac], + [with_gstreamer=0.10] +) + +case "$with_gstreamer" in + 0.10) gstreamer_api_version=0.10 + gstreamer_minimum_version=0.10.31 + ;; + 1.0) gstreamer_api_version=1.0 + gstreamer_minimum_version=0.11.90 + ;; +esac +AC_DEFINE_UNQUOTED(GSTREAMER_API_VERSION, $gstreamer_api_version, [Define the GStreamer+ API version]) + #==================================================== # # Check for required packages # #=====================================================# @@ -97,11 +117,12 @@ XDT_CHECK_PACKAGE([GTHREAD], [gthread-2.0], [glib_minimum_version]) XDT_CHECK_PACKAGE([GMODULE], [gmodule-2.0], [glib_minimum_version]) XDT_CHECK_PACKAGE([GIO], [gio-2.0], [glib_minimum_version]) -XDT_CHECK_PACKAGE([GST], [gstreamer-0.10], [gstreamer_minimum_version]) -XDT_CHECK_PACKAGE([GST_BASE], [gstreamer-base-0.10], [gstreamer_minimum_version]) -XDT_CHECK_PACKAGE([GST_VIDEO], [gstreamer-video-0.10], [gstreamer_minimum_version]) -XDT_CHECK_PACKAGE([GST_INTERFACES], [gstreamer-interfaces-0.10], [gstreamer_minimum_version]) -XDT_CHECK_PACKAGE([GST_PBUTILS], [gstreamer-pbutils-0.10], [0.10.2]) +XDT_CHECK_PACKAGE([GST], [gstreamer-${gstreamer_api_version}], [gstreamer_minimum_version]) +XDT_CHECK_PACKAGE([GST_BASE], [gstreamer-base-${gstreamer_api_version}], [gstreamer_minimum_version]) +XDT_CHECK_PACKAGE([GST_VIDEO], [gstreamer-video-${gstreamer_api_version}], [gstreamer_minimum_version]) +if test x"${gstreamer_api_version}" = x"0.10"; then + XDT_CHECK_PACKAGE([GST_INTERFACES], [gstreamer-interfaces-${gstreamer_api_version}], [gstreamer_minimum_version]) +fi GST_MAJORMINOR=0.10 GST_REQS=0.10.30 diff --git a/src/gst/parole-gst.c b/src/gst/parole-gst.c index 6e27725..606cefd 100644 --- a/src/gst/parole-gst.c +++ b/src/gst/parole-gst.c @@ -28,8 +28,15 @@ #include <glib.h> -#include <gst/interfaces/xoverlay.h> -#include <gst/interfaces/navigation.h> +#include "parole-gst.h" + +#if GST_CHECK_VERSION(1, 0, 0) +#include <gst/video/videooverlay.h> +#include <gst/video/navigation.h> +#else + #include <gst/interfaces/xoverlay.h> + #include <gst/interfaces/navigation.h> +#endif #include <gst/pbutils/missing-plugins.h> #include <gst/pbutils/install-plugins.h> @@ -41,8 +48,6 @@ #include <gdk/gdkx.h> -#include "parole-gst.h" - #include "common/parole-common.h" #include "parole-utils.h" @@ -229,6 +234,8 @@ parole_gst_realize (GtkWidget *widget) GdkColor color; gint mask; + g_print("realize\n"); + GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED); gst = PAROLE_GST (widget); @@ -501,17 +508,21 @@ parole_gst_set_x_overlay (ParoleGst *gst) { GstElement *video_sink; + g_print("eh?\n"); + g_object_get (G_OBJECT (gst->priv->playbin), "video-sink", &video_sink, NULL); g_assert (video_sink != NULL); - if ( GDK_IS_WINDOW (GTK_WIDGET (gst)->window) ) - gst_x_overlay_set_xwindow_id (GST_X_OVERLAY (video_sink), - GDK_WINDOW_XWINDOW (GTK_WIDGET (gst)->window)); - - gst_object_unref (video_sink); +#if GST_CHECK_VERSION(1, 0, 0) + gst_video_overlay_set_window_handle (GST_VIDEO_OVERLAY (video_sink), + GDK_WINDOW_XID (GTK_WIDGET (gst)->window)); +#else + gst_x_overlay_set_xwindow_id (GST_X_OVERLAY (video_sink), + GDK_WINDOW_XWINDOW (GTK_WIDGET (gst)->window)); +#endif } @@ -540,14 +551,22 @@ parole_gst_expose_event (GtkWidget *widget, GdkEventExpose *ev) case GST_STATE_PLAYING: if ( playing_video || gst->priv->vis_loaded) { - gst_x_overlay_expose (GST_X_OVERLAY (gst->priv->video_sink)); +#if GST_CHECK_VERSION(1, 0, 0) + gst_video_overlay_expose (GST_VIDEO_OVERLAY (gst->priv->video_sink)); +#else + gst_x_overlay_expose (GST_X_OVERLAY (gst->priv->video_sink)); +#endif } else parole_gst_draw_logo (gst); break; case GST_STATE_PAUSED: if ( playing_video || gst->priv->vis_loaded || gst->priv->target == GST_STATE_PLAYING ) - gst_x_overlay_expose (GST_X_OVERLAY (gst->priv->video_sink)); +#if GST_CHECK_VERSION(1, 0, 0) + gst_video_overlay_expose (GST_VIDEO_OVERLAY (gst->priv->video_sink)); +#else + gst_x_overlay_expose (GST_X_OVERLAY (gst->priv->video_sink)); +#endif else parole_gst_draw_logo (gst); break; @@ -555,7 +574,11 @@ parole_gst_expose_event (GtkWidget *widget, GdkEventExpose *ev) if (gst->priv->target != GST_STATE_PLAYING) parole_gst_draw_logo (gst); else - gst_x_overlay_expose (GST_X_OVERLAY (gst->priv->video_sink)); +#if GST_CHECK_VERSION(1, 0, 0) + gst_video_overlay_expose (GST_VIDEO_OVERLAY (gst->priv->video_sink)); +#else + gst_x_overlay_expose (GST_X_OVERLAY (gst->priv->video_sink)); +#endif break; case GST_STATE_NULL: case GST_STATE_VOID_PENDING: @@ -622,7 +645,11 @@ parole_gst_tick_timeout (gpointer data) "duration", &duration, NULL); - gst_element_query_position (gst->priv->playbin, &format, &pos); +#if GST_CHECK_VERSION(1, 0, 0) + gst_element_query_position (gst->priv->playbin, format, &pos); +#else + gst_element_query_position (gst->priv->playbin, &format, &pos); +#endif if ( G_UNLIKELY (format != GST_FORMAT_TIME ) ) goto out; @@ -682,7 +709,11 @@ parole_gst_query_duration (ParoleGst *gst) gst_time = GST_FORMAT_TIME; gst_element_query_duration (gst->priv->playbin, - &gst_time, +#if GST_CHECK_VERSION(1, 0, 0) + gst_time, +#else + &gst_time, +#endif &absolute_duration); if (gst_time == GST_FORMAT_TIME) @@ -777,7 +808,11 @@ parole_gst_load_subtitle (ParoleGst *gst) static void parole_gst_get_pad_capabilities (GObject *object, GParamSpec *pspec, ParoleGst *gst) { +#if GST_CHECK_VERSION(1, 0, 0) + GstCaps *caps; +#else GstPad *pad; +#endif GstStructure *st; gint width; gint height; @@ -785,12 +820,21 @@ parole_gst_get_pad_capabilities (GObject *object, GParamSpec *pspec, ParoleGst * guint den; const GValue *value; - pad = GST_PAD (object); +#if GST_CHECK_VERSION(1, 0, 0) + caps = GST_CAPS (object); - if ( !GST_IS_PAD (pad) || !GST_PAD_CAPS (pad) ) + if ( !GST_IS_CAPS (caps) || !GST_CAPS (caps) ) return; + st = gst_caps_get_structure (GST_CAPS (caps), 0); +#else + pad = GST_PAD (object); + + if ( !GST_IS_PAD (pad) || !GST_PAD_CAPS (pad) ) + return; + st = gst_caps_get_structure (GST_PAD_CAPS (pad), 0); +#endif if ( st ) { @@ -842,8 +886,12 @@ parole_gst_query_info (ParoleGst *gst) if (videopad) { GstCaps *caps; - - if ((caps = gst_pad_get_negotiated_caps (videopad))) + +#if GST_CHECK_VERSION(1, 0, 0) + if ((caps = gst_pad_get_current_caps (videopad))) +#else + if ((caps = gst_pad_get_negotiated_caps (videopad))) +#endif { parole_gst_get_pad_capabilities (G_OBJECT (videopad), NULL, gst); gst_caps_unref (caps); @@ -1003,11 +1051,19 @@ parole_gst_evaluate_state (ParoleGst *gst, GstState old, GstState new, GstState static void parole_gst_element_message_sync (GstBus *bus, GstMessage *message, ParoleGst *gst) { +#if GST_CHECK_VERSION(1, 0, 0) + if ( !(gst_message_get_structure(message)) ) +#else if ( !message->structure ) - goto out; - +#endif + goto out; + +#if GST_CHECK_VERSION(1, 0, 0) + if ( gst_structure_has_name (gst_message_get_structure(message), "prepare-xwindow-id") ) +#else if ( gst_structure_has_name (message->structure, "prepare-xwindow-id") ) - parole_gst_set_x_overlay (gst); +#endif + parole_gst_set_x_overlay (gst); out: ; } @@ -1018,10 +1074,18 @@ parole_gst_buffer_to_pixbuf (GstBuffer *buffer) GdkPixbufLoader *loader; GdkPixbuf *pixbuf = NULL; GError *err = NULL; +#if GST_CHECK_VERSION (1, 0, 0) + GstMapInfo info; +#endif loader = gdk_pixbuf_loader_new (); +#if GST_CHECK_VERSION (1, 0, 0) + gst_buffer_map (buffer, &info, GST_MAP_READ); + if (gdk_pixbuf_loader_write (loader, info.data, info.size, &err) && +#else if (gdk_pixbuf_loader_write (loader, buffer->data, buffer->size, &err) && +#endif gdk_pixbuf_loader_close (loader, &err)) { pixbuf = gdk_pixbuf_loader_get_pixbuf (loader); if (pixbuf) @@ -1031,6 +1095,10 @@ parole_gst_buffer_to_pixbuf (GstBuffer *buffer) g_error_free (err); } +#if GST_CHECK_VERSION (1, 0, 0) + gst_buffer_unmap (buffer, &info); +#endif + g_object_unref (loader); return pixbuf; } @@ -1092,14 +1160,21 @@ parole_gst_tag_list_get_cover_external (ParoleGst *gst) } static const GValue * -parole_gst_tag_list_get_cover_real (GstTagList *tag_list) +parole_gst_tag_list_get_cover_real (ParoleGst *gst, GstTagList *tag_list) { +#if GST_CHECK_VERSION(1, 0, 0) + GstPad *videopad; + GstCaps *caps; +#endif const GValue *cover_value = NULL; guint i; for (i = 0; ; i++) { const GValue *value; +#if GST_CHECK_VERSION(1, 0, 0) +#else GstBuffer *buffer; +#endif GstStructure *caps_struct; int type; @@ -1109,9 +1184,16 @@ parole_gst_tag_list_get_cover_real (GstTagList *tag_list) if (value == NULL) break; +#if GST_CHECK_VERSION(1, 0, 0) + g_signal_emit_by_name (gst->priv->playbin, "get-video-pad", i, &videopad); + caps = gst_pad_query_caps(videopad, NULL); + caps_struct = gst_caps_get_structure (caps, 0); + gst_caps_unref(caps); + g_object_unref (videopad); +#else buffer = gst_value_get_buffer (value); - caps_struct = gst_caps_get_structure (buffer->caps, 0); +#endif gst_structure_get_enum (caps_struct, "image-type", @@ -1146,7 +1228,7 @@ parole_gst_tag_list_get_cover (ParoleGst *gst, GstTagList *tag_list) return pixbuf; } - cover_value = parole_gst_tag_list_get_cover_real (tag_list); + cover_value = parole_gst_tag_list_get_cover_real (gst, tag_list); /* Fallback to preview */ if (!cover_value) { cover_value = gst_tag_list_get_value_index (tag_list, @@ -1186,7 +1268,11 @@ parole_gst_get_meta_data_dvd (ParoleGst *gst) format = gst_format_get_by_nick ("chapter"); /* Get the number of chapters for the current title. */ +#if GST_CHECK_VERSION(1, 0, 0) + if ( gst_element_query_duration (gst->priv->playbin, format, &val) ) +#else if ( gst_element_query_duration (gst->priv->playbin, &format, &val) ) +#endif { n_chapters = (gint) val; num_chapters = (guint) n_chapters; @@ -1204,7 +1290,11 @@ parole_gst_get_meta_data_dvd (ParoleGst *gst) /* Get the current chapter. */ val = -1; +#if GST_CHECK_VERSION(1, 0, 0) + if ( gst_element_query_position (gst->priv->playbin, format, &val) ) +#else if ( gst_element_query_position (gst->priv->playbin, &format, &val) ) +#endif { chapter = (guint)(gint) val; if ( chapter != current_chapter || num_chapters != 1 ) @@ -1377,7 +1467,11 @@ parole_gst_application_message (ParoleGst *gst, GstMessage *msg) { const gchar *name; +#if GST_CHECK_VERSION(1, 0, 0) + name = gst_structure_get_name (gst_message_get_structure(msg)); +#else name = gst_structure_get_name (msg->structure); +#endif if ( !name ) return; @@ -1461,7 +1555,11 @@ parole_gst_bus_event (GstBus *bus, GstMessage *msg, gpointer data) { ParoleGst *gst; GtkDialog *dialog; +#if GST_CHECK_VERSION(1, 0, 0) + const gchar* details[2]; +#else gchar* details[2]; +#endif GstInstallPluginsContext *ctx; gint response; @@ -1794,7 +1892,11 @@ parole_gst_seek_by_format (ParoleGst *gst, GstFormat format, gint step) { gint64 val = 1; +#if GST_CHECK_VERSION(1, 0, 0) + if ( gst_element_query_position (gst->priv->playbin, format, &val) ) +#else if ( gst_element_query_position (gst->priv->playbin, &format, &val) ) +#endif { val += step; if ( !gst_element_seek (gst->priv->playbin, 1.0, format, @@ -2017,11 +2119,20 @@ parole_gst_constructed (GObject *object) gst = PAROLE_GST (object); + g_print("start\n"); + g_object_get (G_OBJECT (gst->priv->conf), "enable-xv", &enable_xv, NULL); + + g_print("playbin\n"); +#if GST_CHECK_VERSION(1, 0, 0) + gst->priv->playbin = gst_element_factory_make ("playbin", "player"); +#else gst->priv->playbin = gst_element_factory_make ("playbin2", "player"); +#endif + g_print("null?\n"); if ( G_UNLIKELY (gst->priv->playbin == NULL) ) { @@ -2035,11 +2146,13 @@ parole_gst_constructed (GObject *object) g_error ("playbin load failed"); } + g_print("xv\n"); if (enable_xv) { gst->priv->video_sink = gst_element_factory_make ("xvimagesink", "video"); gst->priv->xvimage_sink = TRUE; } + g_print("ximagesink\n"); if ( G_UNLIKELY (gst->priv->video_sink == NULL) ) { @@ -2077,7 +2190,11 @@ parole_gst_constructed (GObject *object) * Handling 'prepare-xwindow-id' message async causes XSync * error in some occasions So we handle this message synchronously */ - gst_bus_set_sync_handler (gst->priv->bus, gst_bus_sync_signal_handler, gst); + gst_bus_set_sync_handler (gst->priv->bus, gst_bus_sync_signal_handler, gst +#if GST_CHECK_VERSION (1, 0, 0) + , NULL +#endif + ); gst->priv->sig2 = g_signal_connect (gst->priv->bus, "sync-message::element", G_CALLBACK (parole_gst_element_message_sync), gst); @@ -2565,7 +2682,11 @@ gint parole_gst_get_current_cdda_track (ParoleGst *gst) format = gst_format_get_by_nick ("track"); +#if GST_CHECK_VERSION(1, 0, 0) + if ( gst_element_query_position (gst->priv->playbin, format, &pos) ) +#else if ( gst_element_query_position (gst->priv->playbin, &format, &pos) ) +#endif { TRACE ("Pos %" G_GINT64_FORMAT, pos); ret_val = (gint) pos; @@ -2589,7 +2710,11 @@ gint64 parole_gst_get_stream_position (ParoleGst *gst) GstFormat format = GST_FORMAT_TIME; gint64 pos; +#if GST_CHECK_VERSION(1, 0, 0) + gst_element_query_position (gst->priv->playbin, format, &pos); +#else gst_element_query_position (gst->priv->playbin, &format, &pos); +#endif return pos / GST_SECOND; } diff --git a/src/parole-conf-dialog.c b/src/parole-conf-dialog.c index 1afac29..8203fa7 100644 --- a/src/parole-conf-dialog.c +++ b/src/parole-conf-dialog.c @@ -256,7 +256,11 @@ void parole_conf_dialog_vis_plugin_changed_cb (GtkComboBox *widget, ParoleConfD if ( f ) { g_object_set (G_OBJECT (self->priv->conf), +#if GST_CHECK_VERSION (1, 0, 0) + "vis-name", GST_OBJECT_NAME (f), +#else "vis-name", GST_PLUGIN_FEATURE_NAME (f), +#endif NULL); } @@ -354,10 +358,18 @@ parole_conf_dialog_set_default_vis_plugin (GtkTreeModel *model, GtkTreePath *pat if ( !g_strcmp0 (vis_name, "none") ) { +#if GST_CHECK_VERSION (1, 0, 0) + if ( !g_strcmp0 (GST_OBJECT_NAME (f), "Goom") ) +#else if ( !g_strcmp0 (GST_PLUGIN_FEATURE_NAME (f), "Goom") ) +#endif ret = TRUE; } +#if GST_CHECK_VERSION (1, 0, 0) + else if ( !g_strcmp0 (GST_OBJECT_NAME (f), vis_name) ) +#else else if ( !g_strcmp0 (GST_PLUGIN_FEATURE_NAME (f), vis_name) ) +#endif { ret = TRUE; } diff --git a/src/parole-vis.c b/src/parole-vis.c index 5f0648b..ebec66e 100644 --- a/src/parole-vis.c +++ b/src/parole-vis.c @@ -60,7 +60,11 @@ GHashTable *parole_vis_get_plugins (void) hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); +#if GST_CHECK_VERSION (1, 0, 0) + plugins = gst_registry_feature_filter (gst_registry_get (), +#else plugins = gst_registry_feature_filter (gst_registry_get_default (), +#endif parole_vis_filter, FALSE, NULL); _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits