The GInputStreams are now requested by a vfunc from
the subclasses instead of relying that the subclass
sets it until it's needed.
This might also fix bug #587896.
Original commit message from CVS:
* configure.ac:
* ext/gio/gstgio.c: (plugin_init):
Add plugin dependency for the GIO and GVfs modules.
Fixes bug #566876.
Original commit message from CVS:
* ext/gio/gstgiobasesrc.c: (gst_gio_base_src_create):
* ext/gnomevfs/gstgnomevfssrc.c: (gst_gnome_vfs_src_create):
Use gst_buffer_try_new_and_alloc() and fail properly if the
allocation failed. This prevents abort() if downstream elements
request an insane amount of memory.
Original commit message from CVS:
* ext/gio/gstgiobasesrc.c: (gst_gio_base_src_finalize),
(gst_gio_base_src_create):
* ext/gio/gstgiobasesrc.h:
Try to read the requested number of bytes, even if the first
read returns less than requested, until nothing is read anymore
or we have the requested amount of bytes. This fixes playback of
files via Samba as Samba only allows to read 64k at once.
Implement a caching algorithm that makes sure that we read at
least 4k of data every time. Some elements will try to read a few
bytes, then seek, read again a few bytes and so on and this is
painfully slow as every operation has to go over DBus if GVfs is
used as backend.
Fixes bug #536849 and #536848.
* ext/gio/gstgiosrc.c: (gst_gio_src_class_init),
(gst_gio_src_check_get_range):
Override check_get_range() to blacklist http/https URIs
and whitelist file URIs. More to be added on demand.
Original commit message from CVS:
* ext/gio/gstgio.c: (_internal_get_supported_protocols),
(gst_gio_get_supported_protocols):
Don't generate a new supported protocols list on each call but cache
it. It's supposed to be static anyway, this way we only leak it once
per process.
* ext/gio/gstgiosink.c: (gst_gio_sink_base_init),
(gst_gio_sink_class_init), (gst_gio_sink_finalize),
(gst_gio_sink_set_property), (gst_gio_sink_get_property),
(gst_gio_sink_start):
* ext/gio/gstgiosink.h:
* ext/gio/gstgiosrc.c: (gst_gio_src_base_init),
(gst_gio_src_class_init), (gst_gio_src_finalize),
(gst_gio_src_set_property), (gst_gio_src_get_property),
(gst_gio_src_start):
* ext/gio/gstgiosrc.h:
API: Add "file" properties where one can set a GFile as source/destination.
Add locking to the properties and use gst_element_class_set_details_simple()
instead of a static GstElementDetails struct.
Original commit message from CVS:
* ext/gio/gstgio.c: (gst_gio_get_supported_protocols):
Return NULL instead of a gchar * array with one NULL element if we
don't get any supported URI schemes from GIO.
Original commit message from CVS:
* ext/gio/gstgio.c: (gst_gio_get_supported_protocols):
Filter cdda from the supported URI schemes. We can't support
musicbrainz tags and everything else one expects from a cdda source
with GIO. Fixes bug #526794.
Original commit message from CVS:
* ext/gio/gstgio.c: (gst_gio_get_supported_protocols):
Correctly set the supported URI schemes and don't leave
some schemes in the middle or at the start at NULL.
Original commit message from CVS:
* ext/gio/gstgio.c: (gst_gio_get_supported_protocols):
Filter http and https protocols. GIO/GVfs handles them but it's
impossible to implement iradio/icecast with it. Better use
souphttpsrc or something else for this.
* ext/gio/gstgiobasesrc.c: (gst_gio_base_src_get_size):
If getting the file informations by a query fails try it with the
seek-to-end trick too.
Original commit message from CVS:
Patch by: Milosz Derezynski <internalerror at gmail dot com>
* ext/gio/gstgiobasesrc.c: (gst_gio_base_src_create):
If seeking to a new position succeeds don't simply return from
create() without creating a buffer. Do this only in the case
seeking to the new position fails. Fixes bug #523054.
Original commit message from CVS:
* ext/gio/gstgiobasesink.c: (gst_gio_base_sink_stop),
(gst_gio_base_sink_set_stream):
* ext/gio/gstgiobasesrc.c: (gst_gio_base_src_stop),
(gst_gio_base_src_set_stream):
* ext/gio/gstgiosink.c: (gst_gio_sink_start):
* ext/gio/gstgiosrc.c: (gst_gio_src_start):
Don't use async operations as they require a running main loop.
This makes us block again when closing streams and unable
to mount the enclosing volume of an URI if it isn't yet.
Original commit message from CVS:
* ext/gio/gstgiobasesink.c: (close_stream_cb):
* ext/gio/gstgiobasesrc.c: (close_stream_cb):
Improve debugging a bit.
* ext/gio/gstgiosink.c: (mount_cb), (gst_gio_sink_start):
* ext/gio/gstgiosink.h:
* ext/gio/gstgiosrc.c: (mount_cb), (gst_gio_src_start):
* ext/gio/gstgiosrc.h:
Try to mount the enclosing volume of a GFile if it isn't mounted
yet. This requires us to wait for an async operation to finish, done
with an nested GMainLoop. Authentication is not supported yet, will
come later.
Original commit message from CVS:
* ext/gio/gstgiostreamsink.c:
* ext/gio/gstgiostreamsrc.c:
Add documentation and example code for giostreamsink/giostreamsrc.
* tests/check/pipelines/gio.c: (GST_START_TEST):
Ask the GMemoryOutputStream for the data instead of assuming that
the pointer to the data stayed the same. It could've been realloc'ed.
Original commit message from CVS:
* ext/gio/gstgiosink.c:
* ext/gio/gstgiosrc.c:
Make the documentation of giosink/giosrc complete, large parts
are based on the gnomevfssink/gnomevfssrc docs.
Original commit message from CVS:
* ext/gio/gstgiobasesink.c: (close_stream_cb),
(gst_gio_base_sink_stop), (gst_gio_base_sink_event),
(gst_gio_base_sink_render), (gst_gio_base_sink_set_stream):
* ext/gio/gstgiobasesrc.c: (close_stream_cb),
(gst_gio_base_src_stop), (gst_gio_base_src_create),
(gst_gio_base_src_set_stream):
Use async variants of the close stream functions to prevent blocking
for a long time there and add some more sanity checks for a correct
stream.
Original commit message from CVS:
* configure.ac:
* ext/gio/gstgiobasesrc.c: (gst_gio_base_src_get_size):
* tests/check/pipelines/gio.c: (free_input), (GST_START_TEST):
Update to GMemoryInputStream API changes in GLib SVN and require
gio-2.0 >= 2.15.1 for this. Fixes bug #507584.
We can also report the duration for every GSeekable, not only
GFileInputStream and GMemoryInputStream.
Original commit message from CVS:
* ext/gio/gstgio.h:
Add macro to check if a stream supports seeking.
* ext/gio/Makefile.am:
* ext/gio/gstgiobasesink.c: (gst_gio_base_sink_base_init),
(gst_gio_base_sink_class_init), (gst_gio_base_sink_init),
(gst_gio_base_sink_finalize), (gst_gio_base_sink_start),
(gst_gio_base_sink_stop), (gst_gio_base_sink_unlock),
(gst_gio_base_sink_unlock_stop), (gst_gio_base_sink_event),
(gst_gio_base_sink_render), (gst_gio_base_sink_query),
(gst_gio_base_sink_set_stream):
* ext/gio/gstgiobasesink.h:
* ext/gio/gstgiobasesrc.c: (gst_gio_base_src_base_init),
(gst_gio_base_src_class_init), (gst_gio_base_src_init),
(gst_gio_base_src_finalize), (gst_gio_base_src_start),
(gst_gio_base_src_stop), (gst_gio_base_src_get_size),
(gst_gio_base_src_is_seekable), (gst_gio_base_src_unlock),
(gst_gio_base_src_unlock_stop), (gst_gio_base_src_check_get_range),
(gst_gio_base_src_create), (gst_gio_base_src_set_stream):
* ext/gio/gstgiobasesrc.h:
Refactor common GIO functions to GstGioBaseSink and GstGioBaseSrc
base classes that only require a GInputStream or GOutputStream to
work.
* ext/gio/gstgiosink.c: (gst_gio_sink_base_init),
(gst_gio_sink_class_init), (gst_gio_sink_init),
(gst_gio_sink_finalize), (gst_gio_sink_start):
* ext/gio/gstgiosink.h:
* ext/gio/gstgiosrc.c: (gst_gio_src_base_init),
(gst_gio_src_class_init), (gst_gio_src_init),
(gst_gio_src_finalize), (gst_gio_src_start):
* ext/gio/gstgiosrc.h:
Use the newly created base classes here.
* ext/gio/gstgio.c: (plugin_init):
* ext/gio/gstgiostreamsink.c: (gst_gio_stream_sink_base_init),
(gst_gio_stream_sink_class_init), (gst_gio_stream_sink_init),
(gst_gio_stream_sink_finalize), (gst_gio_stream_sink_set_property),
(gst_gio_stream_sink_get_property):
* ext/gio/gstgiostreamsink.h:
* ext/gio/gstgiostreamsrc.c: (gst_gio_stream_src_base_init),
(gst_gio_stream_src_class_init), (gst_gio_stream_src_init),
(gst_gio_stream_src_finalize), (gst_gio_stream_src_set_property),
(gst_gio_stream_src_get_property):
* ext/gio/gstgiostreamsrc.h:
Implement GstGioStreamSink and GstGioStreamSrc that have a property
to set the GInputStream/GOutputStream that should be used.
* tests/check/Makefile.am:
* tests/check/pipelines/.cvsignore:
* tests/check/pipelines/gio.c: (message_handler), (GST_START_TEST),
(gio_testsuite), (main):
Add unit test for giostreamsrc and giostreamsink.
Original commit message from CVS:
* ext/gio/gstgio.c: (plugin_init):
Remove nowadays unnecessary workaround for a crash.
* ext/gio/gstgiosink.c: (gst_gio_sink_finalize),
(gst_gio_sink_start), (gst_gio_sink_stop),
(gst_gio_sink_unlock_stop):
* ext/gio/gstgiosink.h:
* ext/gio/gstgiosrc.c: (gst_gio_src_finalize), (gst_gio_src_start),
(gst_gio_src_stop), (gst_gio_src_unlock_stop):
* ext/gio/gstgiosrc.h:
Make the finalize function safer, clean up everything that could stay
around.
Reset the cancellable instead of creating a new one after cancelling
some operation.
Don't store the GFile in the element, it's only necessary for creating
the streams.
Original commit message from CVS:
* ext/gio/gstgio.c: (gst_gio_get_supported_protocols):
Use GIO function to get a list of supported URI schemes instead of
hard coding something.
Original commit message from CVS:
* ext/gio/gstgiosink.c: (gst_gio_sink_base_init),
(gst_gio_sink_set_property), (gst_gio_sink_render):
* ext/gio/gstgiosrc.c: (gst_gio_src_base_init),
(gst_gio_src_set_property):
Some minor cleanup and allow setting the location only when the
element is not playing or paused.
Original commit message from CVS:
* docs/plugins/gst-plugins-bad-plugins.hierarchy:
Update hierarchy.
* ext/gio/gstgiosink.h:
* ext/gio/gstgiosrc.h:
Mark private fields of the instance structs private.
Original commit message from CVS:
Patch by: René Stadler <mail at renestadler dot de>
* configure.ac:
* ext/Makefile.am:
* ext/gio/Makefile.am:
* ext/gio/gstgio.c: (gst_gio_error), (gst_gio_seek),
(gst_gio_get_supported_protocols),
(gst_gio_uri_handler_get_type_sink),
(gst_gio_uri_handler_get_type_src),
(gst_gio_uri_handler_get_protocols), (gst_gio_uri_handler_get_uri),
(gst_gio_uri_handler_set_uri), (gst_gio_uri_handler_init),
(gst_gio_uri_handler_do_init), (plugin_init):
* ext/gio/gstgio.h:
* ext/gio/gstgiosink.c: (gst_gio_sink_base_init),
(gst_gio_sink_class_init), (gst_gio_sink_init),
(gst_gio_sink_finalize), (gst_gio_sink_set_property),
(gst_gio_sink_get_property), (gst_gio_sink_start),
(gst_gio_sink_stop), (gst_gio_sink_unlock),
(gst_gio_sink_unlock_stop), (gst_gio_sink_event),
(gst_gio_sink_render), (gst_gio_sink_query):
* ext/gio/gstgiosink.h:
* ext/gio/gstgiosrc.c: (gst_gio_src_base_init),
(gst_gio_src_class_init), (gst_gio_src_init),
(gst_gio_src_finalize), (gst_gio_src_set_property),
(gst_gio_src_get_property), (gst_gio_src_start),
(gst_gio_src_stop), (gst_gio_src_get_size),
(gst_gio_src_is_seekable), (gst_gio_src_unlock),
(gst_gio_src_unlock_stop), (gst_gio_src_check_get_range),
(gst_gio_src_create):
* ext/gio/gstgiosrc.h:
Add a GIO/GVFS plugin with source and sink elements. This will
only be enabled when --enable-experimental is given to configure
for now as the GIO API is not stable yet. Fixes#476916.