From: <tp...@fr...> - 2005-12-27 21:43:36
|
CVS Root: /cvs/gstreamer Module: gst-plugins-base Changes by: tpm Date: Tue Dec 27 2005 13:42:35 PST Log message: * ext/gnomevfs/Makefile.am: * ext/gnomevfs/gstgnomevfs.c: (gst_gnome_vfs_uri_get_type), (gst_gnome_vfs_handle_copy), (gst_gnome_vfs_handle_free), (gst_gnome_vfs_handle_get_type), (plugin_init): * ext/gnomevfs/gstgnomevfs.h: * ext/gnomevfs/gstgnomevfssink.c: (gst_gnome_vfs_sink_do_init), (gst_gnome_vfs_sink_base_init), (gst_gnome_vfs_sink_class_init), (gst_gnome_vfs_sink_finalize), (gst_gnome_vfs_sink_init), (gst_gnome_vfs_sink_set_property), (gst_gnome_vfs_sink_get_property), (gst_gnome_vfs_sink_open_file), (gst_gnome_vfs_sink_close_file), (gst_gnome_vfs_sink_start), (gst_gnome_vfs_sink_stop), (gst_gnome_vfs_sink_handle_event), (gst_gnome_vfs_sink_query), (gst_gnome_vfs_sink_render), (gst_gnome_vfs_sink_uri_get_type), (gst_gnome_vfs_sink_uri_get_protocols), (gst_gnome_vfs_sink_uri_get_uri), (gst_gnome_vfs_sink_uri_set_uri), (gst_gnome_vfs_sink_uri_handler_init): * ext/gnomevfs/gstgnomevfssink.h: Port gnomevfssink; add gtk-doc blurb. * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnome_vfs_src_get_type), (gst_gnome_vfs_src_base_init), (gst_gnome_vfs_src_class_init), (gst_gnome_vfs_src_init), (gst_gnome_vfs_src_finalize), (gst_gnome_vfs_src_uri_get_type), (gst_gnome_vfs_src_uri_get_protocols), (gst_gnome_vfs_src_uri_get_uri), (gst_gnome_vfs_src_uri_set_uri), (gst_gnome_vfs_src_uri_handler_init), (gst_gnome_vfs_src_set_property), (gst_gnome_vfs_src_get_property), (gst_gnome_vfs_src_unicodify), (audiocast_thread_run), (gst_gnome_vfs_src_send_additional_headers_callback), (gst_gnome_vfs_src_received_headers_callback), (gst_gnome_vfs_src_push_callbacks), (gst_gnome_vfs_src_pop_callbacks), (gst_gnome_vfs_src_get_icy_metadata), (gst_gnome_vfs_src_create), (gst_gnome_vfs_src_is_seekable), (gst_gnome_vfs_src_get_size), (gst_gnome_vfs_src_start), (gst_gnome_vfs_src_stop): * ext/gnomevfs/gstgnomevfssrc.h: s/gst_gnomevfssrc/gst_gnome_vfs_src/; move header stuff to header file; add gtk-doc blurb with example pipelines. Modified files: . : ChangeLog ext/gnomevfs : Makefile.am gstgnomevfs.c gstgnomevfs.h gstgnomevfssink.c gstgnomevfssrc.c Added files: ext/gnomevfs : gstgnomevfssink.h gstgnomevfssrc.h Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ChangeLog.diff?r1=1.2242&r2=1.2243 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ext/gnomevfs/Makefile.am.diff?r1=1.12&r2=1.13 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ext/gnomevfs/gstgnomevfs.c.diff?r1=1.10&r2=1.11 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ext/gnomevfs/gstgnomevfs.h.diff?r1=1.3&r2=1.4 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ext/gnomevfs/gstgnomevfssink.c.diff?r1=1.34&r2=1.35 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ext/gnomevfs/gstgnomevfssink.h?rev=1.1&content-type=text/vnd.viewcvs-markup http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ext/gnomevfs/gstgnomevfssrc.c.diff?r1=1.75&r2=1.76 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ext/gnomevfs/gstgnomevfssrc.h?rev=1.1&content-type=text/vnd.viewcvs-markup ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins-base/ChangeLog,v retrieving revision 1.2242 retrieving revision 1.2243 diff -u -d -r1.2242 -r1.2243 --- ChangeLog 23 Dec 2005 18:08:38 -0000 1.2242 +++ ChangeLog 27 Dec 2005 21:42:23 -0000 1.2243 @@ -1,3 +1,45 @@ +2005-12-27 Tim-Philipp Müller <tim at centricular dot net> + + * ext/gnomevfs/Makefile.am: + * ext/gnomevfs/gstgnomevfs.c: (gst_gnome_vfs_uri_get_type), + (gst_gnome_vfs_handle_copy), (gst_gnome_vfs_handle_free), + (gst_gnome_vfs_handle_get_type), (plugin_init): + * ext/gnomevfs/gstgnomevfs.h: + * ext/gnomevfs/gstgnomevfssink.c: (gst_gnome_vfs_sink_do_init), + (gst_gnome_vfs_sink_base_init), (gst_gnome_vfs_sink_class_init), + (gst_gnome_vfs_sink_finalize), (gst_gnome_vfs_sink_init), + (gst_gnome_vfs_sink_set_property), + (gst_gnome_vfs_sink_get_property), (gst_gnome_vfs_sink_open_file), + (gst_gnome_vfs_sink_close_file), (gst_gnome_vfs_sink_start), + (gst_gnome_vfs_sink_stop), (gst_gnome_vfs_sink_handle_event), + (gst_gnome_vfs_sink_query), (gst_gnome_vfs_sink_render), + (gst_gnome_vfs_sink_uri_get_type), + (gst_gnome_vfs_sink_uri_get_protocols), + (gst_gnome_vfs_sink_uri_get_uri), (gst_gnome_vfs_sink_uri_set_uri), + (gst_gnome_vfs_sink_uri_handler_init): + * ext/gnomevfs/gstgnomevfssink.h: + Port gnomevfssink; add gtk-doc blurb. + * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnome_vfs_src_get_type), + (gst_gnome_vfs_src_base_init), (gst_gnome_vfs_src_class_init), + (gst_gnome_vfs_src_init), (gst_gnome_vfs_src_finalize), + (gst_gnome_vfs_src_uri_get_type), + (gst_gnome_vfs_src_uri_get_protocols), + (gst_gnome_vfs_src_uri_get_uri), (gst_gnome_vfs_src_uri_set_uri), + (gst_gnome_vfs_src_uri_handler_init), + (gst_gnome_vfs_src_set_property), (gst_gnome_vfs_src_get_property), + (gst_gnome_vfs_src_unicodify), (audiocast_thread_run), + (gst_gnome_vfs_src_send_additional_headers_callback), + (gst_gnome_vfs_src_received_headers_callback), + (gst_gnome_vfs_src_push_callbacks), + (gst_gnome_vfs_src_pop_callbacks), + (gst_gnome_vfs_src_get_icy_metadata), (gst_gnome_vfs_src_create), + (gst_gnome_vfs_src_is_seekable), (gst_gnome_vfs_src_get_size), + (gst_gnome_vfs_src_start), (gst_gnome_vfs_src_stop): + * ext/gnomevfs/gstgnomevfssrc.h: + s/gst_gnomevfssrc/gst_gnome_vfs_src/; move header stuff to header + file; add gtk-doc blurb with example pipelines. === release 0.10.1 === 2005-12-23 Thomas Vander Stichele <thomas at apestaart dot org> Index: Makefile.am RCS file: /cvs/gstreamer/gst-plugins-base/ext/gnomevfs/Makefile.am,v retrieving revision 1.12 retrieving revision 1.13 diff -u -d -r1.12 -r1.13 --- Makefile.am 13 Jul 2005 17:58:02 -0000 1.12 +++ Makefile.am 27 Dec 2005 21:42:23 -0000 1.13 @@ -2,16 +2,16 @@ libgstgnomevfs_la_SOURCES = \ gstgnomevfs.c \ + gstgnomevfssink.c \ gstgnomevfssrc.c \ gstgnomevfsuri.c -EXTRA_DIST = \ - gstgnomevfssink.c - libgstgnomevfs_la_CFLAGS = $(GST_CFLAGS) $(GNOME_VFS_CFLAGS) libgstgnomevfs_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) libgstgnomevfs_la_LIBADD = $(GNOME_VFS_LIBS) $(GST_BASE_LIBS) noinst_HEADERS = \ gstgnomevfs.h \ + gstgnomevfssink.h \ + gstgnomevfssrc.h \ gstgnomevfsuri.h Index: gstgnomevfs.c RCS file: /cvs/gstreamer/gst-plugins-base/ext/gnomevfs/gstgnomevfs.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -d -r1.10 -r1.11 --- gstgnomevfs.c 16 Oct 2005 13:54:37 -0000 1.10 +++ gstgnomevfs.c 27 Dec 2005 21:42:23 -0000 1.11 @@ -26,27 +26,67 @@ #include "gst/gst-i18n-plugin.h" #include "gstgnomevfs.h" +#include "gstgnomevfssrc.h" +#include "gstgnomevfssink.h" #include <libgnomevfs/gnome-vfs.h> #include <gst/gst.h> -GST_DEBUG_CATEGORY_EXTERN (gnomevfssrc_debug); -static gboolean -plugin_init (GstPlugin * plugin) +GType +gst_gnome_vfs_uri_get_type (void) { - gnome_vfs_init (); + static GType type; /* 0 */ - GST_DEBUG_CATEGORY_INIT (gnomevfssrc_debug, "gnomevfssrc", 0, - "Gnome-VFS Source"); + if (type == 0) { + type = g_boxed_type_register_static ("GnomeVFSURI", + (GBoxedCopyFunc) gnome_vfs_uri_ref, + (GBoxedFreeFunc) gnome_vfs_uri_unref); + } + return type; +} +static gpointer +gst_gnome_vfs_handle_copy (gpointer handle) +{ + return handle; +static void +gst_gnome_vfs_handle_free (gpointer handle) + return; +gst_gnome_vfs_handle_get_type (void) + /* hackish, but makes it show up nicely in gst-inspect */ + type = g_boxed_type_register_static ("GnomeVFSHandle", + (GBoxedCopyFunc) gst_gnome_vfs_handle_copy, + (GBoxedFreeFunc) gst_gnome_vfs_handle_free); +static gboolean +plugin_init (GstPlugin * plugin) + /* gnome vfs engine init */ + if (!gnome_vfs_initialized ()) + gnome_vfs_init (); if (!gst_element_register (plugin, "gnomevfssrc", GST_RANK_SECONDARY, - gst_gnomevfssrc_get_type ())) + gst_gnome_vfs_src_get_type ())) return FALSE; -/* if (!gst_element_register (plugin, "gnomevfssink", GST_RANK_SECONDARY, - gst_gnomevfssink_get_type ())) + gst_gnome_vfs_sink_get_type ())) -*/ #ifdef ENABLE_NLS setlocale (LC_ALL, ""); Index: gstgnomevfs.h RCS file: /cvs/gstreamer/gst-plugins-base/ext/gnomevfs/gstgnomevfs.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- gstgnomevfs.h 15 Mar 2004 16:32:31 -0000 1.3 +++ gstgnomevfs.h 27 Dec 2005 21:42:23 -0000 1.4 @@ -24,11 +24,12 @@ #include <glib-object.h> G_BEGIN_DECLS - -GType gst_gnomevfssink_get_type (void); -GType gst_gnomevfssrc_get_type (void); +#define GST_TYPE_GNOME_VFS_URI (gst_gnome_vfs_uri_get_type ()) +#define GST_TYPE_GNOME_VFS_HANDLE (gst_gnome_vfs_handle_get_type ()) +GType gst_gnome_vfs_uri_get_type (void); +GType gst_gnome_vfs_handle_get_type (void); G_END_DECLS Index: gstgnomevfssink.c RCS file: /cvs/gstreamer/gst-plugins-base/ext/gnomevfs/gstgnomevfssink.c,v retrieving revision 1.34 retrieving revision 1.35 diff -u -d -r1.34 -r1.35 --- gstgnomevfssink.c 12 Oct 2005 14:32:28 -0000 1.34 +++ gstgnomevfssink.c 27 Dec 2005 21:42:23 -0000 1.35 @@ -3,6 +3,7 @@ * 2000 Wim Taymans <wt...@ch...> * 2001 Bastien Nocera <ha...@ha...> * 2003 Colin Walters <wa...@ve...> + * 2005 Tim-Philipp Müller <tim centricular net> * * gstgnomevfssink.c: @@ -22,71 +23,52 @@ * Boston, MA 02111-1307, USA. */ +/** + * SECTION:element-gnomevfssink + * @short_description: Write a stream to a GnomeVFS URI + * @see_also: #GstFileSink, #GstGnomeVFSSrc + * + * <refsect2> + * <para> + * This plugin writes incoming data to a local or remote location specified + * by an URI. This location can be specified using any protocol supported by + * the GnomeVFS library. Common protocols are 'file', 'ftp', or 'smb'. + * </para> + * Example pipeline: + * <programlisting> + * gst-launch -v filesrc location=input.xyz ! gnomevfssink location=file:///home/joe/out.xyz + * </programlisting> + * The above pipeline will simply copy a local file. Instead of gnomevfssink, + * we could just as well have used the filesink element here. + * Another example pipeline: + * gst-launch -v filesrc location=foo.mp3 ! mad ! flacenc ! gnomevfssink location=smb://othercomputer/foo.flac + * The above pipeline will re-encode an mp3 file into FLAC format and store + * it on a remote host using the Samba protocol. + * </refsect2> + */ #ifdef HAVE_CONFIG_H #include "config.h" #endif -#include "gst/gst-i18n-plugin.h" -#include "gstgnomevfs.h" -#include "gstgnomevfsuri.h" +#include "gst/gst-i18n-plugin.h" #include <string.h> #include <errno.h> -#define GST_TYPE_GNOMEVFSSINK \ - (gst_gnomevfssink_get_type()) -#define GST_GNOMEVFSSINK(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_GNOMEVFSSINK,GstGnomeVFSSink)) -#define GST_GNOMEVFSSINK_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_GNOMEVFSSINK,GstGnomeVFSSinkClass)) -#define GST_IS_GNOMEVFSSINK(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_GNOMEVFSSINK)) -#define GST_IS_GNOMEVFSSINK_CLASS(obj) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_GNOMEVFSSINK)) -typedef struct _GstGnomeVFSSink GstGnomeVFSSink; -typedef struct _GstGnomeVFSSinkClass GstGnomeVFSSinkClass; -typedef enum -{ - GST_GNOMEVFSSINK_OPEN = GST_ELEMENT_FLAG_LAST, - GST_GNOMEVFSSINK_FLAG_LAST = GST_ELEMENT_FLAG_LAST + 2 -} -GstGnomeVFSSinkFlags; -struct _GstGnomeVFSSink - GstElement element; - /* uri */ - GnomeVFSURI *uri; - gchar *uri_name; - /* handle */ - GnomeVFSHandle *handle; - /* whether we opened the handle ourselves */ - gboolean own_handle; -}; -struct _GstGnomeVFSSinkClass - GstElementClass parent_class; - /* signals */ - gboolean (*erase_ask) (GstElement * element, GnomeVFSURI * uri); -/* GnomeVFSSink signals and args */ enum - /* FILL ME */ SIGNAL_ERASE_ASK, LAST_SIGNAL }; @@ -99,73 +81,68 @@ ARG_HANDLE -static void gst_gnomevfssink_base_init (gpointer g_class); -static void gst_gnomevfssink_class_init (GstGnomeVFSSinkClass * klass); -static void gst_gnomevfssink_init (GstGnomeVFSSink * gnomevfssink); -static void gst_gnomevfssink_finalize (GObject * obj); +static void gst_gnome_vfs_sink_finalize (GObject * obj); -static void gst_gnomevfssink_uri_handler_init (gpointer g_iface, +static void gst_gnome_vfs_sink_uri_handler_init (gpointer g_iface, gpointer iface_data); -static void gst_gnomevfssink_set_property (GObject * object, guint prop_id, +static void gst_gnome_vfs_sink_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec); -static void gst_gnomevfssink_get_property (GObject * object, guint prop_id, +static void gst_gnome_vfs_sink_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec); -static gboolean gst_gnomevfssink_open_file (GstGnomeVFSSink * sink); -static void gst_gnomevfssink_close_file (GstGnomeVFSSink * sink); +static gboolean gst_gnome_vfs_sink_open_file (GstGnomeVFSSink * sink); +static void gst_gnome_vfs_sink_close_file (GstGnomeVFSSink * sink); +static gboolean gst_gnome_vfs_sink_start (GstBaseSink * basesink); +static gboolean gst_gnome_vfs_sink_stop (GstBaseSink * basesink); +static GstFlowReturn gst_gnome_vfs_sink_render (GstBaseSink * basesink, + GstBuffer * buffer); +static gboolean gst_gnome_vfs_sink_handle_event (GstBaseSink * basesink, + GstEvent * event); +static gboolean gst_gnome_vfs_sink_query (GstPad * pad, GstQuery * query); -static void gst_gnomevfssink_chain (GstPad * pad, GstData * _data); +static guint gst_gnome_vfs_sink_signals[LAST_SIGNAL]; /* all 0 */ -static GstStateChangeReturn gst_gnomevfssink_change_state (GstElement * - element); +static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink", + GST_PAD_SINK, + GST_PAD_ALWAYS, + GST_STATIC_CAPS_ANY); -static GstElementClass *parent_class = NULL; -static guint gst_gnomevfssink_signals[LAST_SIGNAL] = { 0 }; +GST_DEBUG_CATEGORY_STATIC (gst_gnome_vfs_sink_debug); +#define GST_CAT_DEFAULT gst_gnome_vfs_sink_debug -GType -gst_gnomevfssink_get_type (void) +gst_gnome_vfs_sink_do_init (GType type) - static GType gnomevfssink_type = 0; + static const GInterfaceInfo urihandler_info = { + gst_gnome_vfs_sink_uri_handler_init, + NULL, + NULL + }; - if (!gnomevfssink_type) { - static const GTypeInfo gnomevfssink_info = { - sizeof (GstGnomeVFSSinkClass), - gst_gnomevfssink_base_init, - NULL, - (GClassInitFunc) gst_gnomevfssink_class_init, - sizeof (GstGnomeVFSSink), - 0, - (GInstanceInitFunc) gst_gnomevfssink_init, - }; - static const GInterfaceInfo urihandler_info = { - gst_gnomevfssink_uri_handler_init, - NULL + g_type_add_interface_static (type, GST_TYPE_URI_HANDLER, &urihandler_info); - gnomevfssink_type = - g_type_register_static (GST_TYPE_ELEMENT, "GstGnomeVFSSink", - &gnomevfssink_info, 0); - g_type_add_interface_static (gnomevfssink_type, GST_TYPE_URI_HANDLER, - &urihandler_info); - } - return gnomevfssink_type; + GST_DEBUG_CATEGORY_INIT (gst_gnome_vfs_sink_debug, "gnomevfssink", 0, + "Gnome VFS sink element"); } +GST_BOILERPLATE_FULL (GstGnomeVFSSink, gst_gnome_vfs_sink, GstBaseSink, + GST_TYPE_BASE_SINK, gst_gnome_vfs_sink_do_init); static void -gst_gnomevfssink_base_init (gpointer g_class) +gst_gnome_vfs_sink_base_init (gpointer g_class) GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); - static GstElementDetails gst_gnomevfssink_details = + static GstElementDetails gst_gnome_vfs_sink_details = GST_ELEMENT_DETAILS ("GnomeVFS Sink", "Sink/File", - "Write stream to a GnomeVFS URI", + "Write a stream to a GnomeVFS URI", "Bastien Nocera <ha...@ha...>"); - gst_element_class_set_details (element_class, &gst_gnomevfssink_details); + gst_element_class_add_pad_template (element_class, + gst_static_pad_template_get (&sinktemplate)); + gst_element_class_set_details (element_class, &gst_gnome_vfs_sink_details); static gboolean @@ -183,48 +160,45 @@ -gst_gnomevfssink_class_init (GstGnomeVFSSinkClass * klass) +gst_gnome_vfs_sink_class_init (GstGnomeVFSSinkClass * klass) + GstBaseSinkClass *basesink_class; GObjectClass *gobject_class; - GstElementClass *gstelement_class; gobject_class = (GObjectClass *) klass; - gstelement_class = (GstElementClass *) klass; - parent_class = g_type_class_ref (GST_TYPE_ELEMENT); + basesink_class = (GstBaseSinkClass *) klass; + gobject_class->set_property = gst_gnome_vfs_sink_set_property; + gobject_class->get_property = gst_gnome_vfs_sink_get_property; + gobject_class->finalize = gst_gnome_vfs_sink_finalize; gst_element_class_install_std_props (GST_ELEMENT_CLASS (klass), "location", ARG_LOCATION, G_PARAM_READWRITE, NULL); g_object_class_install_property (gobject_class, ARG_URI, - g_param_spec_pointer ("uri", "GnomeVFSURI", "URI for GnomeVFS", - G_PARAM_READWRITE)); + g_param_spec_boxed ("uri", "GnomeVFSURI", "URI for GnomeVFS", + GST_TYPE_GNOME_VFS_URI, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, ARG_HANDLE, - g_param_spec_pointer ("handle", - "GnomeVFSHandle", "Handle for GnomeVFS", G_PARAM_READWRITE)); + g_param_spec_boxed ("handle", + "GnomeVFSHandle", "Handle for GnomeVFS", + GST_TYPE_GNOME_VFS_HANDLE, G_PARAM_READWRITE)); - gst_gnomevfssink_signals[SIGNAL_ERASE_ASK] = + gst_gnome_vfs_sink_signals[SIGNAL_ERASE_ASK] = g_signal_new ("allow-overwrite", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_CLEANUP, G_STRUCT_OFFSET (GstGnomeVFSSinkClass, erase_ask), _gst_boolean_allow_overwrite_accumulator, NULL, - gst_marshal_BOOLEAN__POINTER, G_TYPE_BOOLEAN, 1, G_TYPE_POINTER); - gobject_class->set_property = gst_gnomevfssink_set_property; - gobject_class->get_property = gst_gnomevfssink_get_property; - gobject_class->finalize = gst_gnomevfssink_finalize; - gstelement_class->change_state = gst_gnomevfssink_change_state; + gst_marshal_BOOLEAN__POINTER, G_TYPE_BOOLEAN, 1, GST_TYPE_GNOME_VFS_URI); - /* gnome vfs engine init */ - if (gnome_vfs_initialized () == FALSE) - gnome_vfs_init (); + basesink_class->stop = GST_DEBUG_FUNCPTR (gst_gnome_vfs_sink_stop); + basesink_class->start = GST_DEBUG_FUNCPTR (gst_gnome_vfs_sink_start); + basesink_class->event = GST_DEBUG_FUNCPTR (gst_gnome_vfs_sink_handle_event); + basesink_class->render = GST_DEBUG_FUNCPTR (gst_gnome_vfs_sink_render); + basesink_class->get_times = NULL; -gst_gnomevfssink_finalize (GObject * obj) +gst_gnome_vfs_sink_finalize (GObject * obj) - GstGnomeVFSSink *sink = GST_GNOMEVFSSINK (obj); + GstGnomeVFSSink *sink = GST_GNOME_VFS_SINK (obj); if (sink->uri) { gnome_vfs_uri_unref (sink->uri); @@ -240,168 +214,122 @@ -gst_gnomevfssink_init (GstGnomeVFSSink * gnomevfssink) - GstPad *pad; - GST_OBJECT_FLAG_SET (gnomevfssink, GST_ELEMENT_EVENT_AWARE); - pad = gst_pad_new ("sink", GST_PAD_SINK); - gst_element_add_pad (GST_ELEMENT (gnomevfssink), pad); - gst_pad_set_chain_function (pad, gst_gnomevfssink_chain); - gnomevfssink->uri = NULL; - gnomevfssink->uri_name = NULL; - gnomevfssink->handle = NULL; - gnomevfssink->own_handle = FALSE; -static guint -gst_gnomevfssink_uri_get_type (void) - return GST_URI_SINK; -static gchar ** -gst_gnomevfssink_uri_get_protocols (void) - static gchar **protocols = NULL; - if (!protocols) - protocols = gst_gnomevfs_get_supported_uris (); - return protocols; -static const gchar * -gst_gnomevfssink_uri_get_uri (GstURIHandler * handler) - GstGnomeVFSSink *sink = GST_GNOMEVFSSINK (handler); - return sink->uri_name; -gst_gnomevfssink_uri_set_uri (GstURIHandler * handler, const gchar * uri) +gst_gnome_vfs_sink_init (GstGnomeVFSSink * sink, GstGnomeVFSSinkClass * klass) - if (GST_STATE (sink) == GST_STATE_PLAYING || - GST_STATE (sink) == GST_STATE_PAUSED) - return FALSE; - g_object_set (G_OBJECT (sink), "location", uri, NULL); - return TRUE; + gst_pad_set_query_function (GST_BASE_SINK_PAD (sink), + GST_DEBUG_FUNCPTR (gst_gnome_vfs_sink_query)); -static void -gst_gnomevfssink_uri_handler_init (gpointer g_iface, gpointer iface_data) - GstURIHandlerInterface *iface = (GstURIHandlerInterface *) g_iface; + sink->uri = NULL; + sink->uri_name = NULL; + sink->handle = NULL; + sink->own_handle = FALSE; + sink->data_written = 0; - iface->get_type = gst_gnomevfssink_uri_get_type; - iface->get_protocols = gst_gnomevfssink_uri_get_protocols; - iface->get_uri = gst_gnomevfssink_uri_get_uri; - iface->set_uri = gst_gnomevfssink_uri_set_uri; + GST_BASE_SINK (sink)->sync = FALSE; -gst_gnomevfssink_set_property (GObject * object, guint prop_id, +gst_gnome_vfs_sink_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) GstGnomeVFSSink *sink; + GstState cur_state; - sink = GST_GNOMEVFSSINK (object); + 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: - if (GST_STATE (sink) == GST_STATE_NULL || - GST_STATE (sink) == GST_STATE_READY) { - 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_string (value)) { - sink->uri_name = g_strdup (g_value_get_string (value)); - sink->uri = gnome_vfs_uri_new (sink->uri_name); + case ARG_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; + if (g_value_get_string (value)) { + sink->uri_name = g_value_dup_string (value); + sink->uri = gnome_vfs_uri_new (sink->uri_name); } break; - case ARG_URI: - if (g_value_get_pointer (value)) { - sink->uri = gnome_vfs_uri_ref (g_value_get_pointer (value)); - sink->uri_name = gnome_vfs_uri_to_string (sink->uri, 0); + } + case ARG_URI:{ + 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); - case ARG_HANDLE: - sink->handle = g_value_get_pointer (value); + case ARG_HANDLE:{ + sink->handle = g_value_get_boxed (value); default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } + GST_OBJECT_UNLOCK (sink); -gst_gnomevfssink_get_property (GObject * object, guint prop_id, GValue * value, - GParamSpec * pspec) +gst_gnome_vfs_sink_get_property (GObject * object, guint prop_id, + GValue * value, GParamSpec * pspec) - g_return_if_fail (GST_IS_GNOMEVFSSINK (object)); case ARG_LOCATION: g_value_set_string (value, sink->uri_name); case ARG_URI: - g_value_set_pointer (value, sink->uri); + g_value_set_boxed (value, sink->uri); case ARG_HANDLE: - g_value_set_pointer (value, sink->handle); + g_value_set_boxed (value, sink->handle); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); -gst_gnomevfssink_open_file (GstGnomeVFSSink * sink) +gst_gnome_vfs_sink_open_file (GstGnomeVFSSink * sink) GnomeVFSResult result; - g_return_val_if_fail (!GST_OBJECT_FLAG_IS_SET (sink, GST_GNOMEVFSSINK_OPEN), - FALSE); /* open the file */ result = gnome_vfs_create_uri (&(sink->handle), sink->uri, @@ -413,7 +341,7 @@ gboolean erase_anyway = FALSE; g_signal_emit (G_OBJECT (sink), - gst_gnomevfssink_signals[SIGNAL_ERASE_ASK], 0, sink->uri, + gst_gnome_vfs_sink_signals[SIGNAL_ERASE_ASK], 0, sink->uri, &erase_anyway); if (erase_anyway) { result = gnome_vfs_create_uri (&(sink->handle), sink->uri, @@ -422,7 +350,9 @@ | GNOME_VFS_PERM_GROUP_READ); } - GST_DEBUG ("open: %s", gnome_vfs_result_to_string (result)); + GST_DEBUG_OBJECT (sink, "open: %s", gnome_vfs_result_to_string (result)); if (result != GNOME_VFS_OK) { gchar *filename = gnome_vfs_uri_to_string (sink->uri, GNOME_VFS_URI_HIDE_PASSWORD); @@ -442,18 +372,16 @@ sink->own_handle = FALSE; - GST_OBJECT_FLAG_SET (sink, GST_GNOMEVFSSINK_OPEN); return TRUE; -gst_gnomevfssink_close_file (GstGnomeVFSSink * sink) +gst_gnome_vfs_sink_close_file (GstGnomeVFSSink * sink) - g_return_if_fail (GST_OBJECT_FLAG_IS_SET (sink, GST_GNOMEVFSSINK_OPEN)); if (sink->own_handle) { /* close the file */ result = gnome_vfs_close (sink->handle); @@ -470,176 +398,212 @@ sink->handle = NULL; - GST_OBJECT_FLAG_UNSET (sink, GST_GNOMEVFSSINK_OPEN); -/** - * gst_gnomevfssink_handle_event: - * @sink: reference to GstGnomeVFSSink - * @event: the event to dispatch - * - * Handles the event appropriately (seek, end-of-file, ...) - * Return value: whether to continue processing or not. - */ -gst_gnomevfssink_handle_event (GstGnomeVFSSink * sink, GstEvent * event) +gst_gnome_vfs_sink_start (GstBaseSink * basesink) - GstEventType type; - gboolean res = FALSE; + gboolean ret; - type = GST_EVENT_TYPE (event); + ret = gst_gnome_vfs_sink_open_file (GST_GNOME_VFS_SINK (basesink)); - switch (type) { - case GST_EVENT_EOS: - gst_gnomevfssink_close_file (sink); - gst_element_set_eos (GST_ELEMENT (sink)); - break; + return ret; - case GST_EVENT_DISCONTINUOUS:{ - GnomeVFSResult res; - gint64 offset; +gst_gnome_vfs_sink_stop (GstBaseSink * basesink) + GST_DEBUG_OBJECT (basesink, "closing ..."); + gst_gnome_vfs_sink_close_file (GST_GNOME_VFS_SINK (basesink)); + return TRUE; - if (gst_event_discont_get_value (event, GST_FORMAT_BYTES, &offset)) { - if ((res = gnome_vfs_seek (sink->handle, GNOME_VFS_SEEK_START, - offset)) != GNOME_VFS_OK) { - GST_ERROR_OBJECT (sink, "Failed to seek to offset %" - G_GINT64_FORMAT ": %s", offset, gnome_vfs_result_to_string (res)); - } +gst_gnome_vfs_sink_handle_event (GstBaseSink * basesink, GstEvent * event) + GstGnomeVFSSink *sink; - res = TRUE; - } + sink = GST_GNOME_VFS_SINK (basesink); - case GST_EVENT_SEEK:{ + GST_DEBUG_OBJECT (sink, "processing %s event", GST_EVENT_TYPE_NAME (event)); + switch (GST_EVENT_TYPE (event)) { + case GST_EVENT_NEWSEGMENT:{ GnomeVFSResult res; - GnomeVFSSeekPosition method; + GstFormat format; gint64 offset; - if (GST_EVENT_SEEK_FORMAT (event) != GST_FORMAT_BYTES) { - GST_ERROR_OBJECT (sink, "Can only seek in bytes"); - break; + gst_event_parse_new_segment (event, NULL, NULL, &format, &offset, + NULL, NULL); - switch (GST_EVENT_SEEK_METHOD (event)) { - case GST_SEEK_METHOD_SET: - method = GNOME_VFS_SEEK_START; - break; - case GST_SEEK_METHOD_CUR: - method = GNOME_VFS_SEEK_CURRENT; - case GST_SEEK_METHOD_END: - method = GNOME_VFS_SEEK_END; - default: - GST_ERROR_OBJECT (sink, "Unknown seek method %d", - GST_EVENT_SEEK_METHOD (event)); - goto end; + if (format != GST_FORMAT_BYTES) { + GST_WARNING_OBJECT (sink, "ignored NEWSEGMENT event in %s format", + gst_format_get_name (format)); + break; - offset = GST_EVENT_SEEK_OFFSET (event); - if (GST_EVENT_SEEK_FLAGS (event) & GST_SEEK_FLAG_FLUSH) { - /* how does Gnome-VFS flush? */ + GST_LOG_OBJECT (sink, "seeking to offset %" G_GINT64_FORMAT, offset); + res = gnome_vfs_seek (sink->handle, GNOME_VFS_SEEK_START, offset); - if ((res = gnome_vfs_seek (sink->handle, method, offset)) != GNOME_VFS_OK) { + if (res != GNOME_VFS_OK) { GST_ERROR_OBJECT (sink, "Failed to seek to offset %" - G_GINT64_FORMAT " with method %d: %s", offset, method, - gnome_vfs_result_to_string (res)); + G_GINT64_FORMAT ": %s", offset, gnome_vfs_result_to_string (res)); - case GST_EVENT_FLUSH: - /* how does Gnome-VFS flush? */ + case GST_EVENT_FLUSH_START: + case GST_EVENT_EOS:{ + /* how does Gnome-VFS flush? Do we need to flush? */ - GST_WARNING ("Unhandled event type %d", type); - gst_pad_event_default (gst_element_get_pad (GST_ELEMENT (sink), "sink"), - event); - event = NULL; -end: - if (event) - gst_event_unref (event); - return res; +gst_gnome_vfs_sink_query (GstPad * pad, GstQuery * query) + GstFormat format; + sink = GST_GNOME_VFS_SINK (GST_PAD_PARENT (pad)); + switch (GST_QUERY_TYPE (query)) { + case GST_QUERY_POSITION: + gst_query_parse_position (query, &format, NULL); + switch (format) { + case GST_FORMAT_DEFAULT: + case GST_FORMAT_BYTES: + gst_query_set_position (query, GST_FORMAT_BYTES, sink->data_written); + return TRUE; + default: + return FALSE; + case GST_QUERY_FORMATS: + gst_query_set_formats (query, 2, GST_FORMAT_DEFAULT, GST_FORMAT_BYTES); + return TRUE; + default: + return gst_pad_query_default (pad, query); - * gst_gnomevfssink_chain: - * @pad: the pad this gnomevfssink is connected to - * @buf: the buffer that has to be absorbed - * take the buffer from the pad and write to file if it's open -gst_gnomevfssink_chain (GstPad * pad, GstData * _data) +static GstFlowReturn +gst_gnome_vfs_sink_render (GstBaseSink * basesink, GstBuffer * buf) - GstBuffer *buf; + GnomeVFSFileSize written, cur_pos; - GnomeVFSFileSize bytes_written; + GstFlowReturn ret; + guint64 back_pending = 0; - g_return_if_fail (pad != NULL); - g_return_if_fail (GST_IS_PAD (pad)); - sink = GST_GNOMEVFSSINK (gst_pad_get_parent (pad)); + if (gnome_vfs_tell (sink->handle, &cur_pos) == GNOME_VFS_OK) { + if (cur_pos < sink->data_written) + back_pending = sink->data_written - cur_pos; - if (GST_OBJECT_FLAG_IS_SET (sink, GST_GNOMEVFSSINK_OPEN)) { - if (GST_IS_EVENT (_data)) { - gst_gnomevfssink_handle_event (sink, GST_EVENT (_data)); - return; + result = gnome_vfs_write (sink->handle, GST_BUFFER_DATA (buf), + GST_BUFFER_SIZE (buf), &written); + switch (result) { + case GNOME_VFS_OK:{ + GST_DEBUG_OBJECT (sink, "wrote %" G_GINT64_FORMAT " bytes at %" + G_GINT64_FORMAT, (gint64) written, (gint64) cur_pos); + if (written < GST_BUFFER_SIZE (buf)) { + /* FIXME: what to do here? (tpm) */ + g_warning ("%s: %d bytes should be written, only %" + G_GUINT64_FORMAT " bytes written", G_STRLOC, + GST_BUFFER_SIZE (buf), written); + sink->data_written += GST_BUFFER_SIZE (buf) - back_pending; + ret = GST_FLOW_OK; + break; + case GNOME_VFS_ERROR_NO_SPACE:{ + /* TODO: emit signal/send msg on out-of-diskspace and + * handle this gracefully (see open bug) (tpm) */ + /* fall-through */ + default:{ + gchar *filename = gnome_vfs_uri_to_string (sink->uri, + GNOME_VFS_URI_HIDE_PASSWORD); - buf = GST_BUFFER (_data); - g_return_if_fail (buf != NULL); - result = - gnome_vfs_write (sink->handle, GST_BUFFER_DATA (buf), - GST_BUFFER_SIZE (buf), &bytes_written); - GST_DEBUG ("write: %s, written_bytes: %" G_GUINT64_FORMAT, - gnome_vfs_result_to_string (result), bytes_written); - if (bytes_written < GST_BUFFER_SIZE (buf)) { - printf ("gnomevfssink : Warning : %d bytes should be written, only %" - G_GUINT64_FORMAT " bytes written\n", GST_BUFFER_SIZE (buf), - bytes_written); + GST_ELEMENT_ERROR (sink, RESOURCE, WRITE, + (_("Error while writing to file \"%s\"."), filename), + ("%s, bufsize=%u, written=%u", gnome_vfs_result_to_string (result), + GST_BUFFER_SIZE (buf), (guint) written)); + g_free (filename); + ret = GST_FLOW_ERROR; - gst_data_unref (_data); + return GST_FLOW_OK; -static GstStateChangeReturn -gst_gnomevfssink_change_state (GstElement * element, GstStateChange transition) +/*** GSTURIHANDLER INTERFACE *************************************************/ +static guint +gst_gnome_vfs_sink_uri_get_type (void) - g_return_val_if_fail (GST_IS_GNOMEVFSSINK (element), - GST_STATE_CHANGE_FAILURE); + return GST_URI_SINK; - switch (transition) { - case GST_STATE_CHANGE_READY_TO_PAUSED: - if (!GST_OBJECT_FLAG_IS_SET (element, GST_GNOMEVFSSINK_OPEN)) { - if (!gst_gnomevfssink_open_file (GST_GNOMEVFSSINK (element))) - return GST_STATE_CHANGE_FAILURE; - case GST_STATE_CHANGE_PAUSED_TO_READY: - if (GST_OBJECT_FLAG_IS_SET (element, GST_GNOMEVFSSINK_OPEN)) - gst_gnomevfssink_close_file (GST_GNOMEVFSSINK (element)); - default: +static gchar ** +gst_gnome_vfs_sink_uri_get_protocols (void) + static gchar **protocols = NULL; + if (!protocols) + protocols = gst_gnomevfs_get_supported_uris (); + return protocols; +static const gchar * +gst_gnome_vfs_sink_uri_get_uri (GstURIHandler * handler) + GstGnomeVFSSink *sink = GST_GNOME_VFS_SINK (handler); + return sink->uri_name; +gst_gnome_vfs_sink_uri_set_uri (GstURIHandler * handler, const gchar * uri) + GST_WARNING_OBJECT (sink, "cannot set uri when PAUSED or PLAYING"); + return FALSE; - if (GST_ELEMENT_CLASS (parent_class)->change_state) - return GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); + g_object_set (sink, "location", uri, NULL); - return GST_STATE_CHANGE_SUCCESS; +gst_gnome_vfs_sink_uri_handler_init (gpointer g_iface, gpointer iface_data) + GstURIHandlerInterface *iface = (GstURIHandlerInterface *) g_iface; + iface->get_type = gst_gnome_vfs_sink_uri_get_type; + iface->get_protocols = gst_gnome_vfs_sink_uri_get_protocols; + iface->get_uri = gst_gnome_vfs_sink_uri_get_uri; + iface->set_uri = gst_gnome_vfs_sink_uri_set_uri; --- NEW FILE: gstgnomevfssink.h --- /* GStreamer * Copyright (C) 1999,2000 Erik Walthinsen <om...@cs...> * 2000 Wim Taymans <wt...@ch...> * 2001 Bastien Nocera <ha...@ha...> * 2003 Colin Walters <wa...@ve...> * 2005 Tim-Philipp Müller <tim centricular net> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef __GST_GNOME_VFS_SINK_H__ #define __GST_GNOME_VFS_SINK_H__ #include "gstgnomevfs.h" #include "gstgnomevfsuri.h" #include <gst/base/gstbasesink.h> G_BEGIN_DECLS #define GST_TYPE_GNOME_VFS_SINK \ (gst_gnome_vfs_sink_get_type()) #define GST_GNOME_VFS_SINK(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_GNOME_VFS_SINK,GstGnomeVFSSink)) #define GST_GNOME_VFS_SINK_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_GNOME_VFS_SINK,GstGnomeVFSSinkClass)) #define GST_IS_GNOME_VFS_SINK(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_GNOME_VFS_SINK)) #define GST_IS_GNOME_VFS_SINK_CLASS(obj) \ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_GNOME_VFS_SINK)) typedef struct _GstGnomeVFSSink GstGnomeVFSSink; typedef struct _GstGnomeVFSSinkClass GstGnomeVFSSinkClass; struct _GstGnomeVFSSink { GstBaseSink basesink; /*< private >*/ /* uri */ GnomeVFSURI *uri; gchar *uri_name; /* handle */ GnomeVFSHandle *handle; /* whether we opened the handle ourselves */ gboolean own_handle; guint64 data_written; }; struct _GstGnomeVFSSinkClass GstBaseSink basesink_class; /* signals */ gboolean (*erase_ask) (GstElement * element, GnomeVFSURI * uri); GType gst_gnome_vfs_sink_get_type (void); G_END_DECLS #endif /* __GST_GNOME_VFS_SINK_H__ */ Index: gstgnomevfssrc.c RCS file: /cvs/gstreamer/gst-plugins-base/ext/gnomevfs/gstgnomevfssrc.c,v retrieving revision 1.75 retrieving revision 1.76 diff -u -d -r1.75 -r1.76 --- gstgnomevfssrc.c 3 Oct 2005 04:25:54 -0000 1.75 +++ gstgnomevfssrc.c 27 Dec 2005 21:42:23 -0000 1.76 @@ -23,6 +23,47 @@ + * SECTION:element-gnomevfssrc + * @short_description: Read from any GnomeVFS-supported location + * @see_also: #GstFileSrc, #GstGnomeVFSSink + * This plugin reads data from a local or remote location specified + * the GnomeVFS library. Common protocols are 'file', 'http', 'ftp', or 'smb'. + * gst-launch -v gnomevfssrc location=file:///home/joe/foo.xyz ! fakesink + * The above pipeline will simply read a local file and do nothing with the + * data read. Instead of gnomevfssrc, we could just as well have used the + * filesrc element here. + * gst-launch -v gnomevfssrc location=smb://othercomputer/foo.xyz ! filesink location=/home/joe/foo.xyz + * The above pipeline will copy a file from a remote host to the local file + * system using the Samba protocol. + * Yet another example pipeline: + * gst-launch -v gnomevfssrc location=http://music.foobar.com/demo.mp3 ! mad ! audioconvert ! audioscale ! alsasink + * The above pipeline will read and decode and play an mp3 file from a + * web server using the http protocol. #define BROKEN_SIG 1 /*#undef BROKEN_SIG */ @@ -32,8 +73,7 @@ #include <stdlib.h> #include <sys/types.h> @@ -50,68 +90,17 @@ -#include <gst/base/gstbasesrc.h> -#include <libgnomevfs/gnome-vfs.h> /* gnome-vfs.h doesn't include the following header, which we need: */ #include <libgnomevfs/gnome-vfs-standard-callbacks.h> -GST_DEBUG_CATEGORY (gnomevfssrc_debug); +GST_DEBUG_CATEGORY_STATIC (gnomevfssrc_debug); #define GST_CAT_DEFAULT gnomevfssrc_debug -#define GST_TYPE_GNOMEVFSSRC \ - (gst_gnomevfssrc_get_type()) -#define GST_GNOMEVFSSRC(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_GNOMEVFSSRC,GstGnomeVFSSrc)) -#define GST_GNOMEVFSSRC_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_GNOMEVFSSRC,GstGnomeVFSSrcClass)) -#define GST_IS_GNOMEVFSSRC(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_GNOMEVFSSRC)) -#define GST_IS_GNOMEVFSSRC_CLASS(obj) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_GNOMEVFSSRC)) static GStaticMutex count_lock = G_STATIC_MUTEX_INIT; static gint ref_count = 0; static gboolean vfs_owner = FALSE; -typedef struct _GstGnomeVFSSrc - GstBaseSrc element; - /* uri, file, ... */ - GnomeVFSFileSize size; /* -1 = unknown */ - GnomeVFSFileOffset curoffset; /* current offset in file */ - gboolean seekable; - /* icecast/audiocast metadata extraction handling */ - gboolean iradio_mode; - gboolean http_callbacks_pushed; - gint icy_metaint; - GnomeVFSFileSize icy_count; - gchar *iradio_name; - gchar *iradio_genre; - gchar *iradio_url; - gchar *iradio_title; - GThread *audiocast_thread; - GList *audiocast_notify_queue; - GMutex *audiocast_queue_mutex; - GMutex *audiocast_udpdata_mutex; - gint audiocast_thread_die_infd; - gint audiocast_thread_die_outfd; - gint audiocast_port; - gint audiocast_fd; -} GstGnomeVFSSrc; -typedef struct _GstGnomeVFSSrcClass - GstBaseSrcClass parent_class; -} GstGnomeVFSSrcClass; static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, @@ -130,23 +119,23 @@ ARG_IRADIO_TITLE -static void gst_gnomevfssrc_base_init (gpointer g_class); -static void gst_gnomevfssrc_class_init (GstGnomeVFSSrcClass * klass); -static void gst_gnomevfssrc_init (GstGnomeVFSSrc * gnomevfssrc); -static void gst_gnomevfssrc_finalize (GObject * object); -static void gst_gnomevfssrc_uri_handler_init (gpointer g_iface, +static void gst_gnome_vfs_src_base_init (gpointer g_class); +static void gst_gnome_vfs_src_class_init (GstGnomeVFSSrcClass * klass); +static void gst_gnome_vfs_src_init (GstGnomeVFSSrc * gnomevfssrc); +static void gst_gnome_vfs_src_finalize (GObject * object); +static void gst_gnome_vfs_src_uri_handler_init (gpointer g_iface, -static void gst_gnomevfssrc_set_property (GObject * object, guint prop_id, +static void gst_gnome_vfs_src_set_property (GObject * object, guint prop_id, -static void gst_gnomevfssrc_get_property (GObject * object, guint prop_id, +static void gst_gnome_vfs_src_get_property (GObject * object, guint prop_id, -static gboolean gst_gnomevfssrc_stop (GstBaseSrc * src); -static gboolean gst_gnomevfssrc_start (GstBaseSrc * src); -static gboolean gst_gnomevfssrc_is_seekable (GstBaseSrc * src); -static gboolean gst_gnomevfssrc_get_size (GstBaseSrc * src, guint64 * size); -static GstFlowReturn gst_gnomevfssrc_create (GstBaseSrc * basesrc, +static gboolean gst_gnome_vfs_src_stop (GstBaseSrc * src); +static gboolean gst_gnome_vfs_src_start (GstBaseSrc * src); +static gboolean gst_gnome_vfs_src_is_seekable (GstBaseSrc * src); +static gboolean gst_gnome_vfs_src_get_size (GstBaseSrc * src, guint64 * size); +static GstFlowReturn gst_gnome_vfs_src_create (GstBaseSrc * basesrc, guint64 offset, guint size, GstBuffer ** buffer); static int audiocast_init (GstGnomeVFSSrc * src); @@ -158,24 +147,24 @@ static GstElementClass *parent_class = NULL; GType -gst_gnomevfssrc_get_type (void) +gst_gnome_vfs_src_get_type (void) static GType gnomevfssrc_type = 0; if (!gnomevfssrc_type) { static const GTypeInfo gnomevfssrc_info = { sizeof (GstGnomeVFSSrcClass), - gst_gnomevfssrc_base_init, + gst_gnome_vfs_src_base_init, NULL, - (GClassInitFunc) gst_gnomevfssrc_class_init, + (GClassInitFunc) gst_gnome_vfs_src_class_init, sizeof (GstGnomeVFSSrc), 0, - (GInstanceInitFunc) gst_gnomevfssrc_init, + (GInstanceInitFunc) gst_gnome_vfs_src_init, }; static const GInterfaceInfo urihandler_info = { - gst_gnomevfssrc_uri_handler_init, + gst_gnome_vfs_src_uri_handler_init, NULL @@ -190,10 +179,10 @@ -gst_gnomevfssrc_base_init (gpointer g_class) +gst_gnome_vfs_src_base_init (gpointer g_class) - static GstElementDetails gst_gnomevfssrc_details = + static GstElementDetails gst_gnome_vfs_src_details = GST_ELEMENT_DETAILS ("GnomeVFS Source", "Source/File", "Read from any GnomeVFS-supported file", @@ -202,11 +191,14 @@ gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&srctemplate)); - gst_element_class_set_details (element_class, &gst_gnomevfssrc_details); + gst_element_class_set_details (element_class, &gst_gnome_vfs_src_details); + GST_DEBUG_CATEGORY_INIT (gnomevfssrc_debug, "gnomevfssrc", 0, + "Gnome-VFS Source"); -gst_gnomevfssrc_class_init (GstGnomeVFSSrcClass * klass) +gst_gnome_vfs_src_class_init (GstGnomeVFSSrcClass * klass) GstElementClass *gstelement_class; @@ -216,19 +208,20 @@ gstelement_class = GST_ELEMENT_CLASS (klass); gstbasesrc_class = GST_BASE_SRC_CLASS (klass); + parent_class = g_type_class_peek_parent (klass); - gobject_class->finalize = gst_gnomevfssrc_finalize; - gobject_class->set_property = gst_gnomevfssrc_set_property; - gobject_class->get_property = gst_gnomevfssrc_get_property; + gobject_class->finalize = gst_gnome_vfs_src_finalize; + gobject_class->set_property = gst_gnome_vfs_src_set_property; + gobject_class->get_property = gst_gnome_vfs_src_get_property; /* properties */ g_object_class_install_property (gobject_class, ARG_HANDLE, /* icecast stuff */ @@ -256,16 +249,16 @@ "iradio-title", "Name of currently playing song", NULL, G_PARAM_READABLE)); - gstbasesrc_class->start = GST_DEBUG_FUNCPTR (gst_gnomevfssrc_start); - gstbasesrc_class->stop = GST_DEBUG_FUNCPTR (gst_gnomevfssrc_stop); - gstbasesrc_class->get_size = GST_DEBUG_FUNCPTR (gst_gnomevfssrc_get_size); + gstbasesrc_class->start = GST_DEBUG_FUNCPTR (gst_gnome_vfs_src_start); + gstbasesrc_class->stop = GST_DEBUG_FUNCPTR (gst_gnome_vfs_src_stop); + gstbasesrc_class->get_size = GST_DEBUG_FUNCPTR (gst_gnome_vfs_src_get_size); gstbasesrc_class->is_seekable = - GST_DEBUG_FUNCPTR (gst_gnomevfssrc_is_seekable); - gstbasesrc_class->create = GST_DEBUG_FUNCPTR (gst_gnomevfssrc_create); + GST_DEBUG_FUNCPTR (gst_gnome_vfs_src_is_seekable); + gstbasesrc_class->create = GST_DEBUG_FUNCPTR (gst_gnome_vfs_src_create); -gst_gnomevfssrc_init (GstGnomeVFSSrc * gnomevfssrc) +gst_gnome_vfs_src_init (GstGnomeVFSSrc * gnomevfssrc) gnomevfssrc->uri = NULL; gnomevfssrc->uri_name = NULL; @@ -300,9 +293,9 @@ -gst_gnomevfssrc_finalize (GObject * object) +gst_gnome_vfs_src_finalize (GObject * object) - GstGnomeVFSSrc *src = GST_GNOMEVFSSRC (object); + GstGnomeVFSSrc *src = GST_GNOME_VFS_SRC (object); g_static_mutex_lock (&count_lock); ref_count--; @@ -334,13 +327,13 @@ static guint -gst_gnomevfssrc_uri_get_type (void) +gst_gnome_vfs_src_uri_get_type (void) return GST_URI_SRC; static gchar ** -gst_gnomevfssrc_uri_get_protocols (void) +gst_gnome_vfs_src_uri_get_protocols (void) static gchar **protocols = NULL; @@ -351,17 +344,17 @@ static const gchar * -gst_gnomevfssrc_uri_get_uri (GstURIHandler * handler) +gst_gnome_vfs_src_uri_get_uri (GstURIHandler * handler) - GstGnomeVFSSrc *src = GST_GNOMEVFSSRC (handler); + GstGnomeVFSSrc *src = GST_GNOME_VFS_SRC (handler); return src->uri_name; -gst_gnomevfssrc_uri_set_uri (GstURIHandler * handler, const gchar * uri) +gst_gnome_vfs_src_uri_set_uri (GstURIHandler * handler, const gchar * uri) if (GST_STATE (src) == GST_STATE_PLAYING || GST_STATE (src) == GST_STATE_PAUSED) @@ -373,24 +366,24 @@ -gst_gnomevfssrc_uri_handler_init (gpointer g_iface, gpointer iface_data) +gst_gnome_vfs_src_uri_handler_init (gpointer g_iface, gpointer iface_data) GstURIHandlerInterface *iface = (GstURIHandlerInterface *) g_iface; - iface->get_type = gst_gnomevfssrc_uri_get_type; - iface->get_protocols = gst_gnomevfssrc_uri_get_protocols; - iface->get_uri = gst_gnomevfssrc_uri_get_uri; - iface->set_uri = gst_gnomevfssrc_uri_set_uri; + iface->get_type = gst_gnome_vfs_src_uri_get_type; + iface->get_protocols = gst_gnome_vfs_src_uri_get_protocols; + iface->get_uri = gst_gnome_vfs_src_uri_get_uri; + iface->set_uri = gst_gnome_vfs_src_uri_set_uri; -gst_gnomevfssrc_set_property (GObject * object, guint prop_id, +gst_gnome_vfs_src_set_property (GObject * object, guint prop_id, GstGnomeVFSSrc *src; gchar cwd[PATH_MAX]; - src = GST_GNOMEVFSSRC (object); + src = GST_GNOME_VFS_SRC (object); @@ -438,7 +431,7 @@ g_free (src->uri_name); src->uri_name = NULL; } - src->handle = g_value_get_pointer (value); + src->handle = g_value_get_boxed (value); case ARG_IRADIO_MODE: @@ -451,19 +444,19 @@ -gst_gnomevfssrc_get_property (GObject * object, guint prop_id, GValue * value, +gst_gnome_vfs_src_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec) g_value_set_string (value, src->uri_name); - g_value_set_pointer (value, src->handle); + g_value_set_boxed (value, src->handle); g_value_set_boolean (value, src->iradio_mode); @@ -515,7 +508,7 @@ static char * -gst_gnomevfssrc_unicodify (const char *str) +gst_gnome_vfs_src_unicodify (const char *str) return unicodify (str, -1, "locale", "ISO-8859-1", NULL); @@ -674,7 +667,7 @@ if (!strlen (valptr)) continue; - value = gst_gnomevfssrc_unicodify (valptr); + value = gst_gnome_vfs_src_unicodify (valptr); if (!value) { g_print ("Unable to convert \"%s\" to UTF-8!\n", valptr); @@ -745,10 +738,10 @@ -gst_gnomevfssrc_send_additional_headers_callback (gconstpointer in, +gst_gnome_vfs_src_send_additional_headers_callback (gconstpointer in, gsize in_size, gpointer out, gsize out_size, gpointer callback_data) - GstGnomeVFSSrc *src = GST_GNOMEVFSSRC (callback_data); + GstGnomeVFSSrc *src = GST_GNOME_VFS_SRC (callback_data); GnomeVFSModuleCallbackAdditionalHeadersOut *out_args = (GnomeVFSModuleCallbackAdditionalHeadersOut *) out; @@ -763,12 +756,12 @@ -gst_gnomevfssrc_received_headers_callback (gconstpointer in, +gst_gnome_vfs_src_received_headers_callback (gconstpointer in, GList *i; gint icy_metaint; GnomeVFSModuleCallbackReceivedHeadersIn *in_args = (GnomeVFSModuleCallbackReceivedHeadersIn *) in; @@ -810,17 +803,17 @@ GST_DEBUG_OBJECT (src, "key: %s", key); if (!strncmp (key, "name", 4)) { g_free (src->iradio_name); - src->iradio_name = gst_gnomevfssrc_unicodify (value); + src->iradio_name = gst_gnome_vfs_src_unicodify (value); if (src->iradio_name) g_object_notify (G_OBJECT (src), "iradio-name"); } else if (!strncmp (key, "genre", 5)) { g_free (src->iradio_genre); - src->iradio_genre = gst_gnomevfssrc_unicodify (value); + src->iradio_genre = gst_gnome_vfs_src_unicodify (value); if (src->iradio_genre) g_object_notify (G_OBJECT (src), "iradio-genre"); } else if (!strncmp (key, "url", 3)) { g_free (src->iradio_url); - src->iradio_url = gst_gnomevfssrc_unicodify (value); + src->iradio_url = gst_gnome_vfs_src_unicodify (value); if (src->iradio_url) g_object_notify (G_OBJECT (src), "iradio-url"); @@ -828,7 +821,7 @@ -gst_gnomevfssrc_push_callbacks (GstGnomeVFSSrc * src) +gst_gnome_vfs_src_push_callbacks (GstGnomeVFSSrc * src) if (src->http_callbacks_pushed) return; @@ -836,16 +829,16 @@ GST_DEBUG_OBJECT (src, "pushing callbacks"); gnome_vfs_module_callback_push (GNOME_VFS_MODULE_CALLBACK_HTTP_SEND_ADDITIONAL_HEADERS, - gst_gnomevfssrc_send_additional_headers_callback, src, NULL); + gst_gnome_vfs_src_send_additional_headers_callback, src, NULL); (GNOME_VFS_MODULE_CALLBACK_HTTP_RECEIVED_HEADERS, - gst_gnomevfssrc_received_headers_callback, src, NULL); + gst_gnome_vfs_src_received_headers_callback, src, NULL); src->http_callbacks_pushed = TRUE; -gst_gnomevfssrc_pop_callbacks (GstGnomeVFSSrc * src) +gst_gnome_vfs_src_pop_callbacks (GstGnomeVFSSrc * src) if (!src->http_callbacks_pushed) @@ -858,7 +851,7 @@ -gst_gnomevfssrc_get_icy_metadata (GstGnomeVFSSrc * src) +gst_gnome_vfs_src_get_icy_metadata (GstGnomeVFSSrc * src) GnomeVFSFileSize length = 0; GnomeVFSResult res; @@ -903,7 +896,7 @@ for (i = 0; tags[i]; i++) { if (!g_ascii_strncasecmp (tags[i], "StreamTitle=", 12)) { g_free (src->iradio_title); - src->iradio_title = gst_gnomevfssrc_unicodify (tags[i] + 13); + src->iradio_title = gst_gnome_vfs_src_unicodify (tags[i] + 13); if (src->iradio_title) { GST_DEBUG_OBJECT (src, "sending notification on icecast title"); g_object_notify (G_OBJECT (src), "iradio-title"); @@ -914,7 +907,7 @@ if (!g_ascii_strncasecmp (tags[i], "StreamUrl=", 10)) { - src->iradio_url = gst_gnomevfssrc_unicodify (tags[i] + 11); + src->iradio_url = gst_gnome_vfs_src_unicodify (tags[i] + 11); if (src->iradio_url) { GST_DEBUG_OBJECT (src, "sending notification on icecast url"); @@ -934,7 +927,7 @@ * and seeking and such. static GstFlowReturn -gst_gnomevfssrc_create (GstBaseSrc * basesrc, guint64 offset, guint size, +gst_gnome_vfs_src_create (GstBaseSrc * basesrc, guint64 offset, guint size, GstBuffer ** buffer) @@ -943,7 +936,7 @@ guint8 *data; - src = GST_GNOMEVFSSRC (basesrc); + src = GST_GNOME_VFS_SRC (basesrc); GST_DEBUG ("now at %llu, reading %lld, size %u", src->curoffset, offset, size); @@ -988,7 +981,7 @@ src->curoffset += readbytes; if (src->icy_count == src->icy_metaint) { - gst_gnomevfssrc_get_icy_metadata (src); + gst_gnome_vfs_src_get_icy_metadata (src); src->icy_count = 0; } else { @@ -1045,21 +1038,21 @@ -gst_gnomevfssrc_is_seekable (GstBaseSrc * basesrc) +gst_gnome_vfs_src_is_seekable (GstBaseSrc * basesrc) return src->seekable; -gst_gnomevfssrc_get_size (GstBaseSrc * basesrc, guint64 * size) +gst_gnome_vfs_src_get_size (GstBaseSrc * basesrc, guint64 * size) GST_DEBUG_OBJECT (src, "size %" G_GUINT64_FORMAT, src->size); @@ -1073,18 +1066,18 @@ /* open the file, do stuff necessary to go to READY state */ -gst_gnomevfssrc_start (GstBaseSrc * basesrc) +gst_gnome_vfs_src_start (GstBaseSrc * basesrc) GnomeVFSFileInfo *info; if (!audiocast_init (src)) - gst_gnomevfssrc_push_callbacks (src); + gst_gnome_vfs_src_push_callbacks (src); if (src->uri != NULL) { if ((res = gnome_vfs_open_uri (&src->handle, src->uri, @@ -1092,7 +1085,7 @@ gchar *filename = gnome_vfs_uri_to_string (src->uri, - gst_gnomevfssrc_pop_callbacks (src); + gst_gnome_vfs_src_pop_callbacks (src); audiocast_thread_kill (src); if (res == GNOME_VFS_ERROR_NOT_FOUND) { @@ -1143,13 +1136,13 @@ -gst_gnomevfssrc_stop (GstBaseSrc * basesrc) +gst_gnome_vfs_src_stop (GstBaseSrc * basesrc) - gst_gnomevfssrc_pop_callbacks (src); + gst_gnome_vfs_src_pop_callbacks (src); audiocast_thread_kill (src); if (src->own_handle) { --- NEW FILE: gstgnomevfssrc.h --- * 2002 Kristian Rietveld <kr...@gt...> * 2002,2003 Colin Walters <wa...@gn...> #ifndef __GST_GNOME_VFS_SRC_H__ #define __GST_GNOME_VFS_SRC_H__ #include <gst/base/gstbasesrc.h> #include <libgnomevfs/gnome-vfs.h> #define GST_TYPE_GNOME_VFS_SRC \ (gst_gnome_vfs_src_get_type()) #define GST_GNOME_VFS_SRC(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_GNOME_VFS_SRC,GstGnomeVFSSrc)) #define GST_GNOME_VFS_SRC_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_GNOME_VFS_SRC,GstGnomeVFSSrcClass)) #define GST_IS_GNOME_VFS_SRC(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_GNOME_VFS_SRC)) #define GST_IS_GNOME_VFS_SRC_CLASS(obj) \ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_GNOME_VFS_SRC)) typedef struct _GstGnomeVFSSrc GstGnomeVFSSrc; typedef struct _GstGnomeVFSSrcClass GstGnomeVFSSrcClass; struct _GstGnomeVFSSrc GstBaseSrc basesrc; /* uri, file, ... */ GnomeVFSFileSize size; /* -1 = unknown */ GnomeVFSFileOffset curoffset; /* current offset in file */ gboolean seekable; /* icecast/audiocast metadata extraction handling */ gboolean iradio_mode; gboolean http_callbacks_pushed; gint icy_metaint; GnomeVFSFileSize icy_count; gchar *iradio_name; gchar *iradio_genre; gchar *iradio_url; gchar *iradio_title; GThread *audiocast_thread; GList *audiocast_notify_queue; GMutex *audiocast_queue_mutex; GMutex *audiocast_udpdata_mutex; gint audiocast_thread_die_infd; gint audiocast_thread_die_outfd; gint audiocast_port; gint audiocast_fd; struct _GstGnomeVFSSrcClass GstBaseSrcClass basesrc_class; GType gst_gnome_vfs_src_get_type (void); #endif /* __GST_GNOME_VFS_SRC_H__ */ |
From: <tp...@fr...> - 2005-12-28 15:01:01
|
CVS Root: /cvs/gstreamer Module: gst-plugins-base Changes by: tpm Date: Wed Dec 28 2005 06:59:53 PST Log message: * ext/gnomevfs/gstgnomevfssink.h: Use GstBaseSinkClass as parent_class member for class struct, not GstBaseSink. Modified files: . : ChangeLog ext/gnomevfs : gstgnomevfssink.h Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ChangeLog.diff?r1=1.2245&r2=1.2246 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ext/gnomevfs/gstgnomevfssink.h.diff?r1=1.1&r2=1.2 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins-base/ChangeLog,v retrieving revision 1.2245 retrieving revision 1.2246 diff -u -d -r1.2245 -r1.2246 --- ChangeLog 27 Dec 2005 22:29:43 -0000 1.2245 +++ ChangeLog 28 Dec 2005 14:59:41 -0000 1.2246 @@ -1,3 +1,9 @@ +2005-12-28 Tim-Philipp Müller <tim at centricular dot net> + + * ext/gnomevfs/gstgnomevfssink.h: + Use GstBaseSinkClass as parent_class member for class struct, not + GstBaseSink. 2005-12-27 Tim-Philipp Müller <tim at centricular dot net> * gst/videotestsrc/gstvideotestsrc.c: Index: gstgnomevfssink.h RCS file: /cvs/gstreamer/gst-plugins-base/ext/gnomevfs/gstgnomevfssink.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- gstgnomevfssink.h 27 Dec 2005 21:42:23 -0000 1.1 +++ gstgnomevfssink.h 28 Dec 2005 14:59:41 -0000 1.2 @@ -65,7 +65,7 @@ struct _GstGnomeVFSSinkClass { - GstBaseSink basesink_class; + GstBaseSinkClass basesink_class; /* signals */ gboolean (*erase_ask) (GstElement * element, GnomeVFSURI * uri); |
From: <tp...@fr...> - 2006-02-06 19:12:32
|
CVS Root: /cvs/gstreamer Module: gst-plugins-base Changes by: tpm Date: Mon Feb 06 2006 11:09:38 PST Log message: * ext/gnomevfs/gstgnomevfs.c: (plugin_init): Return FALSE from plugin_init() when GnomeVFS can't be initialised for some reason (#328423). Modified files: . : ChangeLog ext/gnomevfs : gstgnomevfs.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ChangeLog.diff?r1=1.2352&r2=1.2353 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ext/gnomevfs/gstgnomevfs.c.diff?r1=1.12&r2=1.13 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins-base/ChangeLog,v retrieving revision 1.2352 retrieving revision 1.2353 diff -u -d -r1.2352 -r1.2353 --- ChangeLog 6 Feb 2006 13:26:54 -0000 1.2352 +++ ChangeLog 6 Feb 2006 19:09:26 -0000 1.2353 @@ -1,3 +1,9 @@ +2006-02-06 Tim-Philipp Müller <tim at centricular dot net> + + * ext/gnomevfs/gstgnomevfs.c: (plugin_init): + Return FALSE from plugin_init() when GnomeVFS can't + be initialised for some reason (#328423). 2006-02-06 Julien MOUTTE <ju...@mo...> * ext/pango/gsttextoverlay.c: (gst_text_overlay_src_event): Index: gstgnomevfs.c RCS file: /cvs/gstreamer/gst-plugins-base/ext/gnomevfs/gstgnomevfs.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -d -r1.12 -r1.13 --- gstgnomevfs.c 27 Jan 2006 01:06:28 -0000 1.12 +++ gstgnomevfs.c 6 Feb 2006 19:09:26 -0000 1.13 @@ -77,8 +77,12 @@ plugin_init (GstPlugin * plugin) { /* gnome vfs engine init */ - if (!gnome_vfs_initialized ()) - gnome_vfs_init (); + if (!gnome_vfs_initialized ()) { + if (!gnome_vfs_init ()) { + GST_WARNING ("Failed to initialize GnomeVFS - not registering plugin!"); + return FALSE; + } + } if (!gst_element_register (plugin, "gnomevfssrc", GST_RANK_SECONDARY, gst_gnome_vfs_src_get_type ())) |
From: <tp...@fr...> - 2006-02-07 11:47:53
|
CVS Root: /cvs/gstreamer Module: gst-plugins-base Changes by: tpm Date: Tue Feb 07 2006 03:44:51 PST Log message: * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnome_vfs_src_create): Treat GNOME_VFS_RESULT_EOF as EOS, not as error (#329194). Post an error message on the bus when we encounter an error, which will hopefully be more meaningful than the 'Internal Flow Error' message users get to see if we just return GST_FLOW_ERROR. Modified files: . : ChangeLog ext/gnomevfs : gstgnomevfssrc.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ChangeLog.diff?r1=1.2354&r2=1.2355 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ext/gnomevfs/gstgnomevfssrc.c.diff?r1=1.78&r2=1.79 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins-base/ChangeLog,v retrieving revision 1.2354 retrieving revision 1.2355 diff -u -d -r1.2354 -r1.2355 --- ChangeLog 7 Feb 2006 11:28:04 -0000 1.2354 +++ ChangeLog 7 Feb 2006 11:44:38 -0000 1.2355 @@ -1,3 +1,12 @@ +2006-02-07 Tim-Philipp Müller <tim at centricular dot net> + + * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnome_vfs_src_create): + Treat GNOME_VFS_RESULT_EOF as EOS, not as error (#329194). + Post an error message on the bus when we encounter an + error, which will hopefully be more meaningful than the + 'Internal Flow Error' message users get to see if we + just return GST_FLOW_ERROR. 2006-02-07 Andy Wingo <wi...@po...> * configure.ac (GST_MAJORMINOR): Update core version req to Index: gstgnomevfssrc.c RCS file: /cvs/gstreamer/gst-plugins-base/ext/gnomevfs/gstgnomevfssrc.c,v retrieving revision 1.78 retrieving revision 1.79 diff -u -d -r1.78 -r1.79 --- gstgnomevfssrc.c 30 Jan 2006 18:17:19 -0000 1.78 +++ gstgnomevfssrc.c 7 Feb 2006 11:44:39 -0000 1.79 @@ -969,12 +969,12 @@ res = gnome_vfs_read (src->handle, data, src->icy_metaint - src->icy_count, &readbytes); + if (res == GNOME_VFS_ERROR_EOF || (res == GNOME_VFS_OK && readbytes == 0)) + goto eos; if (res != GNOME_VFS_OK) goto read_failed; - if (readbytes == 0) - goto eos; - src->icy_count += readbytes; GST_BUFFER_OFFSET (buf) = src->curoffset; GST_BUFFER_SIZE (buf) = readbytes; @@ -992,14 +992,14 @@ res = gnome_vfs_read (src->handle, data, size, &readbytes); src->curoffset += readbytes; } @@ -1010,30 +1010,31 @@ seek_failed: { - GST_ERROR_OBJECT (src, - "Failed to seek to requested position %lld: %s", - offset, gnome_vfs_result_to_string (res)); + GST_ELEMENT_ERROR (src, RESOURCE, SEEK, (NULL), + ("Failed to seek to requested position %" G_GINT64_FORMAT ": %s", + offset, gnome_vfs_result_to_string (res))); return GST_FLOW_ERROR; cannot_seek: - "Requested seek from %lld to %lld on non-seekable stream", - src->curoffset, offset); + ("Requested seek from %" G_GINT64_FORMAT " to %" G_GINT64_FORMAT + "on non-seekable stream", src->curoffset, offset)); read_failed: gst_buffer_unref (buf); - GST_ERROR_OBJECT (src, "Failed to read data: %s", - gnome_vfs_result_to_string (res)); + GST_ELEMENT_ERROR (src, RESOURCE, READ, (NULL), + ("Failed to read data: %s", gnome_vfs_result_to_string (res))); eos: - GST_LOG_OBJECT (src, "Reading data gave EOS"); - return GST_FLOW_WRONG_STATE; + GST_DEBUG_OBJECT (src, "Reading data gave EOS"); + gst_pad_push_event (basesrc->srcpad, gst_event_new_eos ()); + return GST_FLOW_UNEXPECTED; } |
From: <tp...@ke...> - 2006-03-04 14:35:24
|
CVS Root: /cvs/gstreamer Module: gst-plugins-base Changes by: tpm Date: Sat Mar 04 2006 14:35:22 UTC Log message: * configure.ac: Bump requirements to GStreamer CVS for the new error enum. * ext/gnomevfs/gstgnomevfssink.c: (gst_gnome_vfs_sink_render): Emit new GST_RESOURCE_ERROR_NO_SPACE_LEFT when there's no space left on the device (fixes #333352). Modified files: . : ChangeLog configure.ac ext/gnomevfs : gstgnomevfssink.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ChangeLog.diff?r1=1.2443&r2=1.2444 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/configure.ac.diff?r1=1.621&r2=1.622 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ext/gnomevfs/gstgnomevfssink.c.diff?r1=1.37&r2=1.38 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins-base/ChangeLog,v retrieving revision 1.2443 retrieving revision 1.2444 diff -u -d -r1.2443 -r1.2444 --- ChangeLog 3 Mar 2006 23:53:50 -0000 1.2443 +++ ChangeLog 4 Mar 2006 14:35:10 -0000 1.2444 @@ -1,3 +1,12 @@ +2006-03-04 Tim-Philipp Müller <tim at centricular dot net> + + * configure.ac: + Bump requirements to GStreamer CVS for the new error enum. + * ext/gnomevfs/gstgnomevfssink.c: (gst_gnome_vfs_sink_render): + Emit new GST_RESOURCE_ERROR_NO_SPACE_LEFT when there's no + space left on the device (fixes #333352). 2006-03-04 Sebastien Moutte <seb...@mo...> * win32/vs6: Index: configure.ac RCS file: /cvs/gstreamer/gst-plugins-base/configure.ac,v retrieving revision 1.621 retrieving revision 1.622 diff -u -d -r1.621 -r1.622 --- configure.ac 13 Feb 2006 20:49:06 -0000 1.621 +++ configure.ac 4 Mar 2006 14:35:10 -0000 1.622 @@ -43,7 +43,7 @@ AM_PROG_LIBTOOL dnl *** required versions of GStreamer stuff *** -GST_REQ=0.10.2.2 +GST_REQ=0.10.3.1 dnl *** autotools stuff **** Index: gstgnomevfssink.c RCS file: /cvs/gstreamer/gst-plugins-base/ext/gnomevfs/gstgnomevfssink.c,v retrieving revision 1.37 retrieving revision 1.38 diff -u -d -r1.37 -r1.38 --- gstgnomevfssink.c 28 Feb 2006 19:08:12 -0000 1.37 +++ gstgnomevfssink.c 4 Mar 2006 14:35:10 -0000 1.38 @@ -552,8 +552,11 @@ case GNOME_VFS_ERROR_NO_SPACE:{ /* TODO: emit signal/send msg on out-of-diskspace and * handle this gracefully (see open bug) (tpm) */ + GST_ELEMENT_ERROR (sink, RESOURCE, NO_SPACE_LEFT, (NULL), + ("bufsize=%u, written=%u", GST_BUFFER_SIZE (buf), (guint) written)); + ret = GST_FLOW_ERROR; + break; } - /* fall-through */ default:{ gchar *filename = gnome_vfs_uri_to_string (sink->uri, GNOME_VFS_URI_HIDE_PASSWORD); |
From: <tp...@ke...> - 2006-03-06 20:08:11
|
CVS Root: /cvs/gstreamer Module: gst-plugins-base Changes by: tpm Date: Mon Mar 06 2006 20:08:07 UTC Log message: * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnome_vfs_src_class_init), (gst_gnome_vfs_src_check_get_range): Override GstBaseSrc::check_get_range() in order to avoid opening the resource just to check whether we can operate in pull-mode or not - we can predict that pretty well from the URI alone. Should fix problems with last.fm (#331690). (Requires latest core CVS). Modified files: . : ChangeLog ext/gnomevfs : gstgnomevfssrc.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ChangeLog.diff?r1=1.2451&r2=1.2452 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ext/gnomevfs/gstgnomevfssrc.c.diff?r1=1.80&r2=1.81 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins-base/ChangeLog,v retrieving revision 1.2451 retrieving revision 1.2452 diff -u -d -r1.2451 -r1.2452 --- ChangeLog 6 Mar 2006 16:18:51 -0000 1.2451 +++ ChangeLog 6 Mar 2006 20:07:55 -0000 1.2452 @@ -1,3 +1,12 @@ +2006-03-06 Tim-Philipp Müller <tim at centricular dot net> + + * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnome_vfs_src_class_init), + (gst_gnome_vfs_src_check_get_range): + Override GstBaseSrc::check_get_range() in order to avoid opening + the resource just to check whether we can operate in pull-mode or + not - we can predict that pretty well from the URI alone. Should + fix problems with last.fm (#331690). (Requires latest core CVS). 2006-03-06 Wim Taymans <wi...@fl...> * gst-libs/gst/video/gstvideosink.c: (gst_video_sink_init), Index: gstgnomevfssrc.c RCS file: /cvs/gstreamer/gst-plugins-base/ext/gnomevfs/gstgnomevfssrc.c,v retrieving revision 1.80 retrieving revision 1.81 diff -u -d -r1.80 -r1.81 --- gstgnomevfssrc.c 21 Feb 2006 12:16:16 -0000 1.80 +++ gstgnomevfssrc.c 6 Mar 2006 20:07:55 -0000 1.81 @@ -134,6 +134,7 @@ static gboolean gst_gnome_vfs_src_stop (GstBaseSrc * src); static gboolean gst_gnome_vfs_src_start (GstBaseSrc * src); static gboolean gst_gnome_vfs_src_is_seekable (GstBaseSrc * src); +static gboolean gst_gnome_vfs_src_check_get_range (GstBaseSrc * src); static gboolean gst_gnome_vfs_src_get_size (GstBaseSrc * src, guint64 * size); static GstFlowReturn gst_gnome_vfs_src_create (GstBaseSrc * basesrc, guint64 offset, guint size, GstBuffer ** buffer); @@ -254,6 +255,8 @@ gstbasesrc_class->get_size = GST_DEBUG_FUNCPTR (gst_gnome_vfs_src_get_size); gstbasesrc_class->is_seekable = GST_DEBUG_FUNCPTR (gst_gnome_vfs_src_is_seekable); + gstbasesrc_class->check_get_range = + GST_DEBUG_FUNCPTR (gst_gnome_vfs_src_check_get_range); gstbasesrc_class->create = GST_DEBUG_FUNCPTR (gst_gnome_vfs_src_create); } @@ -1048,6 +1051,32 @@ static gboolean +gst_gnome_vfs_src_check_get_range (GstBaseSrc * basesrc) +{ + GstGnomeVFSSrc *src; + gboolean is_local; + src = GST_GNOME_VFS_SRC (basesrc); + if (src->uri == NULL) { + GST_WARNING_OBJECT (src, "no URI set yet"); + /* don't know what to do, let the basesrc class decide for us */ + if (GST_BASE_SRC_CLASS (parent_class)->check_get_range) + return GST_BASE_SRC_CLASS (parent_class)->check_get_range (basesrc); + else + return FALSE; + } + is_local = gnome_vfs_uri_is_local (src->uri); + GST_LOG_OBJECT (src, "%s URI (%s), random access %spossible", + (is_local) ? "local" : "remote", GST_STR_NULL (src->uri_name), + (is_local) ? "" : "not "); + return is_local; +} +static gboolean gst_gnome_vfs_src_get_size (GstBaseSrc * basesrc, guint64 * size) { GstGnomeVFSSrc *src; |
From: <tp...@ke...> - 2006-03-11 16:40:34
|
CVS Root: /cvs/gstreamer Module: gst-plugins-base Changes by: tpm Date: Sat Mar 11 2006 16:40:32 UTC Log message: * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnome_vfs_src_check_get_range): gnome_vfs_uri_is_local() alone is not a good indicator whether we can operate in pull-mode with a specific URI, as it returns FALSE for file:// URIs that point to an NFS-mounted path. Be more conservative here: whitelist local files, blacklist http URIs and use the old mechanism for anything else (fixes #334216). Modified files: . : ChangeLog ext/gnomevfs : gstgnomevfssrc.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ChangeLog.diff?r1=1.2476&r2=1.2477 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ext/gnomevfs/gstgnomevfssrc.c.diff?r1=1.82&r2=1.83 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins-base/ChangeLog,v retrieving revision 1.2476 retrieving revision 1.2477 diff -u -d -r1.2476 -r1.2477 --- ChangeLog 10 Mar 2006 19:15:34 -0000 1.2476 +++ ChangeLog 11 Mar 2006 16:40:20 -0000 1.2477 @@ -1,3 +1,14 @@ +2006-03-11 Tim-Philipp Müller <tim at centricular dot net> + + * ext/gnomevfs/gstgnomevfssrc.c: + (gst_gnome_vfs_src_check_get_range): + gnome_vfs_uri_is_local() alone is not a good indicator + whether we can operate in pull-mode with a specific URI, + as it returns FALSE for file:// URIs that point to an + NFS-mounted path. Be more conservative here: whitelist + local files, blacklist http URIs and use the old + mechanism for anything else (fixes #334216). 2006-03-10 Thomas Vander Stichele <thomas at apestaart dot org> * configure.ac: Index: gstgnomevfssrc.c RCS file: /cvs/gstreamer/gst-plugins-base/ext/gnomevfs/gstgnomevfssrc.c,v retrieving revision 1.82 retrieving revision 1.83 diff -u -d -r1.82 -r1.83 --- gstgnomevfssrc.c 9 Mar 2006 17:50:59 -0000 1.82 +++ gstgnomevfssrc.c 11 Mar 2006 16:40:20 -0000 1.83 @@ -1075,26 +1075,45 @@ gst_gnome_vfs_src_check_get_range (GstBaseSrc * basesrc) { GstGnomeVFSSrc *src; - gboolean is_local; + const gchar *protocol; src = GST_GNOME_VFS_SRC (basesrc); if (src->uri == NULL) { GST_WARNING_OBJECT (src, "no URI set yet"); - /* don't know what to do, let the basesrc class decide for us */ - if (GST_BASE_SRC_CLASS (parent_class)->check_get_range) - return GST_BASE_SRC_CLASS (parent_class)->check_get_range (basesrc); - else - return FALSE; + return FALSE; } - is_local = gnome_vfs_uri_is_local (src->uri); + if (gnome_vfs_uri_is_local (src->uri)) { + GST_LOG_OBJECT (src, "local URI (%s), assuming random access is possible", + GST_STR_NULL (src->uri_name)); + return TRUE; + } - GST_LOG_OBJECT (src, "%s URI (%s), random access %spossible", - (is_local) ? "local" : "remote", GST_STR_NULL (src->uri_name), - (is_local) ? "" : "not "); + /* blacklist certain protocols we know won't work getrange-based */ + protocol = gnome_vfs_uri_get_scheme (src->uri); + if (protocol == NULL) + goto undecided; - return is_local; + if (strcmp (protocol, "http") == 0) { + GST_LOG_OBJECT (src, "blacklisted protocol '%s', no random access possible" + " (URI=%s)", protocol, GST_STR_NULL (src->uri_name)); + /* fall through to undecided */ +undecided: + { + /* don't know what to do, let the basesrc class decide for us */ + GST_LOG_OBJECT (src, "undecided about URI '%s', let base class handle it", + if (GST_BASE_SRC_CLASS (parent_class)->check_get_range) + return GST_BASE_SRC_CLASS (parent_class)->check_get_range (basesrc); } static gboolean |
From: <tp...@ke...> - 2006-03-15 17:11:52
|
CVS Root: /cvs/gstreamer Module: gst-plugins-base Changes by: tpm Date: Wed Mar 15 2006 17:11:46 UTC Log message: Patch by: Tommi Myöhänen <ext-tommi dot myohanen at nokia dot com> * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnome_vfs_src_pop_callbacks): Don't forget to set src->callbacks_pushed to FALSE again when popping them, otherwise re-activation in a different mode won't work (#334620). Modified files: . : ChangeLog ext/gnomevfs : gstgnomevfssrc.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ChangeLog.diff?r1=1.2487&r2=1.2488 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ext/gnomevfs/gstgnomevfssrc.c.diff?r1=1.83&r2=1.84 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins-base/ChangeLog,v retrieving revision 1.2487 retrieving revision 1.2488 diff -u -d -r1.2487 -r1.2488 --- ChangeLog 15 Mar 2006 11:30:29 -0000 1.2487 +++ ChangeLog 15 Mar 2006 17:11:34 -0000 1.2488 @@ -1,5 +1,14 @@ 2006-03-15 Tim-Philipp Müller <tim at centricular dot net> + Patch by: Tommi Myöhänen <ext-tommi dot myohanen at nokia dot com> + + * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnome_vfs_src_pop_callbacks): + Don't forget to set src->callbacks_pushed to FALSE again when + popping them, otherwise re-activation in a different mode won't + work (#334620). + +2006-03-15 Tim-Philipp Müller <tim at centricular dot net> Patch by: Sebastien Moutte <sebastien moutte net> * gst/ffmpegcolorspace/gstffmpegcodecmap.c: (gst_ff_vid_caps_new), Index: gstgnomevfssrc.c RCS file: /cvs/gstreamer/gst-plugins-base/ext/gnomevfs/gstgnomevfssrc.c,v retrieving revision 1.83 retrieving revision 1.84 diff -u -d -r1.83 -r1.84 --- gstgnomevfssrc.c 11 Mar 2006 16:40:20 -0000 1.83 +++ gstgnomevfssrc.c 15 Mar 2006 17:11:34 -0000 1.84 @@ -872,6 +872,8 @@ (GNOME_VFS_MODULE_CALLBACK_HTTP_SEND_ADDITIONAL_HEADERS); gnome_vfs_module_callback_pop (GNOME_VFS_MODULE_CALLBACK_HTTP_RECEIVED_HEADERS); + src->http_callbacks_pushed = FALSE; } static void |
From: <tp...@ke...> - 2006-03-27 16:15:17
|
CVS Root: /cvs/gstreamer Module: gst-plugins-base Changes by: tpm Date: Mon Mar 27 2006 16:15:12 UTC Log message: * ext/gnomevfs/gstgnomevfs.c: (gst_gnome_vfs_location_to_uri_string): * ext/gnomevfs/gstgnomevfs.h: * ext/gnomevfs/gstgnomevfssink.c: (gst_gnome_vfs_sink_set_property): * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnome_vfs_src_set_property): Make gnomevfssink accept filenames as well as URIs for the "location" property, just like gnomevfssrc does (and filesrc/filesink do) (#336190). Modified files: . : ChangeLog ext/gnomevfs : gstgnomevfs.c gstgnomevfs.h gstgnomevfssink.c gstgnomevfssrc.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ChangeLog.diff?r1=1.2514&r2=1.2515 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ext/gnomevfs/gstgnomevfs.c.diff?r1=1.13&r2=1.14 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ext/gnomevfs/gstgnomevfs.h.diff?r1=1.4&r2=1.5 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ext/gnomevfs/gstgnomevfssink.c.diff?r1=1.40&r2=1.41 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ext/gnomevfs/gstgnomevfssrc.c.diff?r1=1.85&r2=1.86 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins-base/ChangeLog,v retrieving revision 1.2514 retrieving revision 1.2515 diff -u -d -r1.2514 -r1.2515 --- ChangeLog 24 Mar 2006 20:35:33 -0000 1.2514 +++ ChangeLog 27 Mar 2006 16:15:00 -0000 1.2515 @@ -1,3 +1,15 @@ +2006-03-27 Tim-Philipp Müller <tim at centricular dot net> + + * ext/gnomevfs/gstgnomevfs.c: + (gst_gnome_vfs_location_to_uri_string): + * ext/gnomevfs/gstgnomevfs.h: + * ext/gnomevfs/gstgnomevfssink.c: + (gst_gnome_vfs_sink_set_property): + * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnome_vfs_src_set_property): + Make gnomevfssink accept filenames as well as URIs for the + "location" property, just like gnomevfssrc does (and + filesrc/filesink do) (#336190). 2006-03-24 Thomas Vander Stichele <thomas at apestaart dot org> * tests/check/generic/clock-selection.c: (GST_START_TEST): Index: gstgnomevfs.c RCS file: /cvs/gstreamer/gst-plugins-base/ext/gnomevfs/gstgnomevfs.c,v retrieving revision 1.13 retrieving revision 1.14 diff -u -d -r1.13 -r1.14 --- gstgnomevfs.c 6 Feb 2006 19:09:26 -0000 1.13 +++ gstgnomevfs.c 27 Mar 2006 16:15:00 -0000 1.14 @@ -32,6 +32,36 @@ #include <libgnomevfs/gnome-vfs.h> #include <gst/gst.h> +#include <string.h> +gchar * +gst_gnome_vfs_location_to_uri_string (const gchar * location) +{ + gchar *newloc, *ret; + if (location == NULL) + return NULL; + /* already an URI string? */ + if (strstr (location, "://")) + return g_strdup (location); + newloc = gnome_vfs_escape_path_string (location); + if (newloc && *newloc == '/') { + ret = g_strdup_printf ("file://%s", newloc); + } else { + gchar *curdir; + curdir = g_get_current_dir (); + ret = g_strdup_printf ("file://%s/%s", curdir, newloc); + g_free (curdir); + } + g_free (newloc); + return ret; +} GType gst_gnome_vfs_uri_get_type (void) { Index: gstgnomevfs.h RCS file: /cvs/gstreamer/gst-plugins-base/ext/gnomevfs/gstgnomevfs.h,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- gstgnomevfs.h 27 Dec 2005 21:42:23 -0000 1.4 +++ gstgnomevfs.h 27 Mar 2006 16:15:00 -0000 1.5 @@ -31,6 +31,8 @@ GType gst_gnome_vfs_uri_get_type (void); GType gst_gnome_vfs_handle_get_type (void); +gchar * gst_gnome_vfs_location_to_uri_string (const gchar * location); G_END_DECLS #endif /* __GST_GNOME_VFS_H__ */ Index: gstgnomevfssink.c RCS file: /cvs/gstreamer/gst-plugins-base/ext/gnomevfs/gstgnomevfssink.c,v retrieving revision 1.40 retrieving revision 1.41 diff -u -d -r1.40 -r1.41 --- gstgnomevfssink.c 24 Mar 2006 10:42:08 -0000 1.40 +++ gstgnomevfssink.c 27 Mar 2006 16:15:00 -0000 1.41 @@ -267,6 +267,8 @@ switch (prop_id) { case ARG_LOCATION:{ + const gchar *new_location; if (sink->uri) { gnome_vfs_uri_unref (sink->uri); sink->uri = NULL; @@ -275,8 +277,10 @@ g_free (sink->uri_name); sink->uri_name = NULL; } - if (g_value_get_string (value)) { - sink->uri_name = g_value_dup_string (value); + 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; Index: gstgnomevfssrc.c RCS file: /cvs/gstreamer/gst-plugins-base/ext/gnomevfs/gstgnomevfssrc.c,v retrieving revision 1.85 retrieving revision 1.86 diff -u -d -r1.85 -r1.86 --- gstgnomevfssrc.c 24 Mar 2006 10:42:08 -0000 1.85 +++ gstgnomevfssrc.c 27 Mar 2006 16:15:00 -0000 1.86 @@ -384,12 +384,13 @@ const GValue * value, GParamSpec * pspec) GstGnomeVFSSrc *src; - gchar cwd[PATH_MAX]; src = GST_GNOME_VFS_SRC (object); - case ARG_LOCATION: + case ARG_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) @@ -404,25 +405,13 @@ src->uri_name = NULL; - const gchar *location = g_value_get_string (value); - - if (!strchr (location, ':')) { - gchar *newloc = gnome_vfs_escape_path_string (location); - if (*newloc == '/') - src->uri_name = g_strdup_printf ("file://%s", newloc); - else - src->uri_name = - g_strdup_printf ("file://%s/%s", getcwd (cwd, PATH_MAX), - newloc); - g_free (newloc); - } else - src->uri_name = g_strdup (location); + src->uri_name = gst_gnome_vfs_location_to_uri_string (new_location); src->uri = gnome_vfs_uri_new (src->uri_name); + } case ARG_HANDLE: if (GST_STATE (src) == GST_STATE_NULL || GST_STATE (src) == GST_STATE_READY) { |
From: <tp...@ke...> - 2006-03-27 16:37:13
|
CVS Root: /cvs/gstreamer Module: gst-plugins-base Changes by: tpm Date: Mon Mar 27 2006 16:36:58 UTC Log message: Patch by: Tommi Myöhänen <ext-tommi dot myohanen at nokia dot com> * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnome_vfs_src_finalize), (gst_gnome_vfs_src_get_icy_metadata): Fix some minor memory leaks (#336194). Modified files: . : ChangeLog ext/gnomevfs : gstgnomevfssrc.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ChangeLog.diff?r1=1.2515&r2=1.2516 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ext/gnomevfs/gstgnomevfssrc.c.diff?r1=1.86&r2=1.87 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins-base/ChangeLog,v retrieving revision 1.2515 retrieving revision 1.2516 diff -u -d -r1.2515 -r1.2516 --- ChangeLog 27 Mar 2006 16:15:00 -0000 1.2515 +++ ChangeLog 27 Mar 2006 16:36:46 -0000 1.2516 @@ -1,5 +1,13 @@ 2006-03-27 Tim-Philipp Müller <tim at centricular dot net> + Patch by: Tommi Myöhänen <ext-tommi dot myohanen at nokia dot com> + + * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnome_vfs_src_finalize), + (gst_gnome_vfs_src_get_icy_metadata): + Fix some minor memory leaks (#336194). +2006-03-27 Tim-Philipp Müller <tim at centricular dot net> * ext/gnomevfs/gstgnomevfs.c: (gst_gnome_vfs_location_to_uri_string): * ext/gnomevfs/gstgnomevfs.h: Index: gstgnomevfssrc.c RCS file: /cvs/gstreamer/gst-plugins-base/ext/gnomevfs/gstgnomevfssrc.c,v retrieving revision 1.86 retrieving revision 1.87 diff -u -d -r1.86 -r1.87 --- gstgnomevfssrc.c 27 Mar 2006 16:15:00 -0000 1.86 +++ gstgnomevfssrc.c 27 Mar 2006 16:36:46 -0000 1.87 @@ -314,10 +314,20 @@ src->uri = NULL; } - if (src->uri_name) { - g_free (src->uri_name); - src->uri_name = NULL; - } + g_free (src->uri_name); + src->uri_name = NULL; + g_free (src->iradio_name); + src->iradio_name = NULL; + g_free (src->iradio_genre); + src->iradio_genre = NULL; + g_free (src->iradio_url); + src->iradio_url = NULL; + g_free (src->iradio_title); + src->iradio_title = NULL; g_mutex_free (src->audiocast_udpdata_mutex); g_mutex_free (src->audiocast_queue_mutex); @@ -933,6 +943,7 @@ g_strfreev (tags); + g_free (data); } /* end of icecast/audiocast metadata extraction support code */ |