Original commit message from CVS:
2004-03-07 Andy Wingo <wingo@pobox.com>
* gst/gstbin.c (gst_bin_remove): Debugging fixes.
* gst/schedulers/gstoptimalscheduler.c (destroy_group): Assert
there are no links to other groups when a group is destroyed.
(gst_opt_scheduler_pad_unlink): If the unlink means an element is
removed from a group, make sure the link count to elements linked
to other pads is appropriately decremented. This really fixes
#135672.
The 1.60->1.61 patch has been reapplied in light of this fix.
* gst/gstelement.c (gst_element_dispose): Really protect against
multiple invocations this time.
Original commit message from CVS:
* gst/gstelement.c: (gst_element_error_full):
revert recent recursive state changing commit - messing with other
elements' states is evil and should be done by apps only.
Original commit message from CVS:
* gst/gstelement.c: (gst_element_get_compatible_pad_template):
check for empty intersection instead of NULL caps
(gst_element_get_compatible_pad_filtered):
remove old workaround that is only a bug nowadays
Original commit message from CVS:
* gst/gstelement.c: (gst_element_error_full):
make elements try to recursively change state to PAUSED on all
parents after an error to suppress ensuing warnings
* gst/parse/grammar.y:
make it check if it was able to sync the state, and throw an error
if not, so stuff like
oggdemux ! vorbisdec ! osssink gets caught
Original commit message from CVS:
2004-03-03 Benjamin Otte <otte@gnome.org>
* gst/schedulers/gstoptimalscheduler.c:
revert last commit by Andy Wingo. It causes segfaults on unreffing
in Rhythmbox. (see bug #135672)
Original commit message from CVS:
* configure.ac:
remove whitespace
* docs/gst/tmpl/gstbuffer.sgml:
* docs/gst/tmpl/gstdata.sgml:
* docs/gst/tmpl/gstreamer-unused.sgml:
* docs/gst/tmpl/gstxml.sgml:
doc update
* docs/manuals.mak:
add a FIXME
* docs/pwg/intro-preface.xml:
* docs/pwg/pwg.xml:
remove GNOME
* gst/gst.c: (init_post):
try GST_PLUGIN_PATH paths for the _global_registry first
* gst/gstelement.h:
add the error message as well, otherwise (null) debug info doesn't
make much sense
* tools/gst-register.c: (main):
spill paths to next registry if this registry is not writable
* po/fr.po:
* po/nl.po:
translation updates
Original commit message from CVS:
* gst/gstbuffer.c (_gst_buffer_initialize):
* gst/gstdata.c (gst_data_get_type):
* gst/gstevent.c (_gst_event_initialize): Use gst_data_copy,
instead of ref, since some applications that uses GBoxed
routines depends on a function that actually returns a copy.
Original commit message from CVS:
2004-02-27 Benjamin Otte <otte@gnome.org>
* gst/gstbuffer.h:
remove gst_buffer_free, use gst_data_unref
* gst/gstdata.c: (gst_data_get_type):
use refcounting in GstData GBoxed registration
* gst/gstdata.h:
remove gst_data_free, use gst_data_unref
Original commit message from CVS:
* gst/gstdata.c (gst_data_get_type): New function, register
GstData as a GBoxed type.
* gst/gstdata.h (GST_TYPE_DATA): New macro
Original commit message from CVS:
* configure.ac: We don't really need glib-2.3. Also remove
some unneeded checks for library functions.
* gst/Makefile.am: Instead, we need to not dist files created
by glib-genmarshal.
Original commit message from CVS:
2004-02-25 Andy Wingo <wingo@pobox.com>
* gst/gstpad.c (gst_pad_link_prepare): Re-add
gst_pad_link_prepare. Please email the list with specific reasons
for reverting.
----------------------------------------------------------------------
Original commit message from CVS:
2004-02-24 Andy Wingo <wingo@pobox.com>
* gst/gstelement.c (gst_element_dispose): Protect against multiple
invocations.
* gst/schedulers/gstoptimalscheduler.c
I added a mess of prototypes at the top of the file by way of
documentation. Some of the operations on chains and groups were
re-organized.
(create_group): Added a type argument so if the group is enabled,
the setup_group_scheduler knows what to do.
(group_elements): Added a type argument here, too, to be passed on
to create_group.
(group_element_set_enabled): If an unlinked PLAYING element is
added to a bin, we have to create a new group to hold the element,
and this function will be called before the group is added to the
chain. Thus we have a valid case for group->chain==NULL. Instead
of calling chain_group_set_enabled, just set the flag on the group
(the chain's status will be set when the group is added to it).
(gst_opt_scheduler_state_transition, chain_group_set_enabled):
Setup the group scheduler when the group is enabled, not
specifically when an element goes PAUSED->PLAYING. This means
PLAYING elements can be added, linked, and scheduled into a
PLAYING pipeline, as was intended.
(add_to_group): Don't ref the group twice. I don't know when this
double-ref got in here. Removing it has the potential to cause
segfaults if other parts of the scheduler are buggy. If you find
that the scheduler is segfaulting for you, put in an extra ref
here and see if that hacks over the underlying issue. Of course,
then find out what code is unreffing a group it doesn't own...
(create_group): Make the extra refcount floating, and remove it
after adding the element. This means that...
(unref_group): Destroy when the refcount reaches 0, not 1, like
every other refcounted object in the known universe.
(remove_from_group): When a group becomes empty, set it to be not
active, and remove it from its chain. Don't unref it again,
there's no floating reference any more.
(destroy_group): We have to remove the group from the chain in
remove_from_group (rather than here) to break refcounting cycles
(the chain always has a ref on the group). So assert that
group->chain==NULL.
(ref_group_by_count): Removed, it was commented out anyway.
(merge_chains): Use the remove_from_chain and add_to_chain
primitives to do the reparenting, instead of rolling our own
implementation.
(add_to_chain): The first non-disabled group in the chain's group
list will be the entry point for the chain. Because buffers can
accumulate in loop elements' peer bufpens, we preferentially
schedule loop groups before get groups to avoid unnecessary
execution of get-based groups when the bufpens are already full.
(gst_opt_scheduler_schedule_run_queue): Debug fixes.
(get_group_schedule_function): Ditto.
(loop_group_schedule_function): Ditto.
(gst_opt_scheduler_loop_wrapper): Ditto.
(gst_opt_scheduler_iterate): Ditto.
I understand the opt scheduler now, yippee!
* gst/gstpad.c: All throughout, added FIXMEs to look at for 0.9.
(gst_pad_get_name, gst_pad_set_chain_function)
(gst_pad_set_get_function, gst_pad_set_event_function)
(gst_pad_set_event_mask_function, gst_pad_get_event_masks)
(gst_pad_get_event_masks_default, gst_pad_set_convert_function)
(gst_pad_set_query_function, gst_pad_get_query_types)
(gst_pad_get_query_types_default)
(gst_pad_set_internal_link_function)
(gst_pad_set_formats_function, gst_pad_set_link_function)
(gst_pad_set_fixate_function, gst_pad_set_getcaps_function)
(gst_pad_set_bufferalloc_function, gst_pad_unlink)
(gst_pad_renegotiate, gst_pad_set_parent, gst_pad_get_parent)
(gst_pad_add_ghost_pad, gst_pad_proxy_getcaps)
(gst_pad_proxy_pad_link, gst_pad_proxy_fixate)
(gst_pad_get_pad_template_caps, gst_pad_check_compatibility)
(gst_pad_get_peer, gst_pad_get_allowed_caps)
(gst_pad_alloc_buffer, gst_pad_push, gst_pad_pull)
(gst_pad_selectv, gst_pad_select, gst_pad_template_get_caps)
(gst_pad_event_default_dispatch, gst_pad_event_default)
(gst_pad_dispatcher, gst_pad_send_event, gst_pad_convert_default)
(gst_pad_convert, gst_pad_query_default, gst_pad_query)
(gst_pad_get_formats_default, gst_pad_get_formats): Better
argument checks, and some doc fixes.
(gst_pad_custom_new_from_template): Um, does anyone
use these functions? Actually make a custom pad instead of a
normal one.
(gst_pad_try_set_caps): Transpose some checks.
(gst_pad_try_set_caps_nonfixed): Same, and use a macro to check if
the pad is in negotiation.
(gst_pad_try_relink_filtered): Use pad_link_prepare.
* gst/gstelement.c: Remove prototypes also defined in gstclock.h.
* gst/gstelement.h:
* gst/gstclock.h: Un-deprecate the old clocking API, as discussed
on the list.
Original commit message from CVS:
2004-02-22 Julien MOUTTE <julien@moutte.net>
* gst/gsttag.c: (_gst_tag_initialize): Registering 2 new tags,
audio-codec and video-codec.
Original commit message from CVS:
2004-02-22 Benjamin Otte <otte@gnome.org>
* gst/gstpad.c:
revert last patch from Andy, it makes gst_pad_can_link_filtered much
too noisy
* gst/gsttag.c: (_gst_tag_initialize):
* gst/gsttag.h:
add GST_TAG_ALBUM_VOLUME_{COUNT,NUMBER}
* libs/gst/control/dparam.c: (gst_dparam_attach):
* libs/gst/control/dparammanager.c: (gst_dpman_attach_dparam):
check that types for attached dparams match
Original commit message from CVS:
2004-02-20 Andy Wingo <wingo@pobox.com>
* gst/gstbin.c:
* gst/gstbuffer.c:
* gst/gstplugin.c:
* gst/registries/gstxmlregistry.c:
* gst/schedulers/gstoptimalscheduler.c: Debugging tweaks.
* gst/gstelement.c (gst_element_set_scheduler): Debugging fixes.
(gst_element_add_pad): DEBUG->INFO, some fixes.
(gst_element_get_compatible_pad_template): Just see if the
templates' caps intersect, not if one is a strict subset of the
other. This conforms more to what gst_pad_link_intersect() does.
(gst_element_class_add_pad_template): Don't memcpy the pad
template, just ref it.
(gst_element_get_compatible_pad_filtered): Clean up debug messages
* gst/gstpad.c (gst_pad_can_link_filtered): Debug a true result.
(gst_pad_link_filtered): Debug changes.
(gst_pad_link_prepare): New function, consolidated from
can_link_filtered and link_filtered.
* gst/parse/grammar.y (gst_parse_perform_link): Made INFO output
look more like that of the functions in gstelement.c
* gst/gstinfo.c (gst_debug_print_object): Put a space before the
object, and return the empty string if object is NULL.
* gst/parse/parse.l: Remove trailing newlines when calling PRINT.
* gst/parse/grammar.y (YYFPRINTF): Log bison debugging info via
LOG, not DEBUG. We still get flex info on debug.
* gst/registries/gstxmlregistry.c (gst_xml_registry_load): Make
debug string more verbose.
(plugin_times_older_than): DEBUG->LOG.
Original commit message from CVS:
2004-02-20 Julien MOUTTE <julien@moutte.net>
* gst/gsttag.h: Adding video-codec and audio-codec for demuxers which
will emit found_tag for each stream they demux with the codec.
Original commit message from CVS:
2004-02-20 Benjamin Otte <otte@gnome.org>
* gst/gstevent.c: (_gst_event_copy), (_gst_event_free):
copy navigation event correctly. Check freeing tag lists.
* gst/gstthread.c: (gst_thread_change_state):
don't abort() on state changing mess - it might happen because of
bugs.
* gst/gstvalue.c: (gst_value_set_caps), (gst_value_get_caps):
use boxed functions
* gst/gstvalue.h:
fix GST_VALUE_HOLDS_CAPS
Original commit message from CVS:
* gst/elements/gstmultifilesrc.c: (gst_multifilesrc_class_init):
Use G_TYPE_STRING in signal prototype instead of G_TYPE_POINTER.
* gst/elements/gsttypefind.c: (gst_type_find_element_class_init):
Use GST_TYPE_CAPS in signal prototype.
* gst/gstcaps.c: (_gst_caps_initialize), (gst_caps_copy_conditional):
Convert GST_TYPE_CAPS to boxed.
* gst/gstelement.c: (gst_element_class_init):
Use GST_TYPE_TAG_LIST in signal prototype.
* gst/gstindex.c: (gst_index_class_init):
* gst/gstindex.h:
Add GST_TYPE_INDEX_ENTRY type.
* gst/gstmarshal.list:
Add necessary marshal types.
* gst/gstpad.c: (gst_real_pad_class_init),
(_gst_real_pad_fixate_accumulator), (gst_pad_link_fixate),
(gst_pad_recover_caps_error):
Use GST_TYPE_CAPS in signal prototypes. Fix some debugging strings.
* gst/gststructure.c: (_gst_structure_initialize),
(gst_structure_copy), (_gst_structure_copy_conditional):
* gst/gststructure.h:
Convert GST_TYPE_STRUCTURE to boxed.
* gst/gsttag.c: (gst_tag_list_get_type):
* gst/gsttag.h:
Add GST_TYPE_TAG_LIST type.
Original commit message from CVS:
2004-02-17 Julien MOUTTE <julien@moutte.net>
* gst/gstpad.c: (gst_pad_try_set_caps): Reverting my change according
to what we agreed with david.
* gst/gstpad.h: adding GST_PAD_IS_NEGOTIATING macro.
Original commit message from CVS:
2004-02-17 Julien MOUTTE <julien@moutte.net>
* gst/gstpad.c: (gst_pad_try_set_caps): We are nice people. Return
silently when the pad is negotiating.
Original commit message from CVS:
2004-02-15 Julien MOUTTE <julien@moutte.net>
* gst/gstbin.c: (gst_bin_change_state), (gst_bin_iterate): Fix a big
bug that was breaking pipelines like sinesrc ! { queue ! osssink } when
an error was thrown by osssink. Basically a state change failure for
an element in a different scheduling group was considered as successfull , which means that caps nego was going on and weird stuff happened. Like i wrote in the comment there, if someone want to revert that please
drop me a mail explaining why because i really see no point in keeping
that broken behaviour there.
* gst/gstqueue.c: (gst_queue_get): Add a safety check as the queue CAN
be empty, we then return NULL which will trigger a nice error when
pulling from the pad.
Original commit message from CVS:
* gst/elements/gstfdsrc.c: (gst_fdsrc_get): Use GST_TIME_TO_TIMEVAL()
* gst/gstclock.h: Avoid using 64-bit % operator (slow!)
Original commit message from CVS:
reviewed by: David Schleef <ds@schleef.org>
* gst/elements/gstfdsrc.c: (gst_fdsrc_class_init),
(gst_fdsrc_init), (gst_fdsrc_set_property),
(gst_fdsrc_get_property), (gst_fdsrc_get):
* gst/elements/gstfdsrc.h: Adds timeout property to fdsrc,
and sends an EOS event if file descriptor reading times out.
Original commit message from CVS:
* docs/gst/tmpl/gstcaps.sgml: Fix stuff that mentions GstProps
* docs/gst/tmpl/gstpadtemplate.sgml: same
* docs/gst/tmpl/gstreamer-unused.sgml: Remove GstProps
* gst/gstobject.c: (gst_object_set_name_default): Do the memleak
fixing dance.
* gst/gstutils.c: Remove disabled code that uses GstProps.
* gst/registries/gstxmlregistry.h: same
* docs/random/ds/0.9-suggested-changes: random notes
Original commit message from CVS:
reviewed by: David Schleef <ds@schleef.org>
* gst/gstclock.c: (gst_clock_entry_new): fixes structure
initialisation of clock (bug #134128)
Original commit message from CVS:
* docs/gst/Makefile.am: Call gst_init() in built gstreamer-scan.
* gst/gstatomic_impl.h: Disable sparc implementation.
Original commit message from CVS:
2004-02-10 Andy Wingo <wingo@pobox.com>
* gst/gstpad.c (gst_pad_custom_new): Add a FIXME, this is a hacky
way to do inheritance.
(gst_pad_get_event_masks, gst_pad_get_event_masks_default)
(gst_pad_get_query_types, gst_pad_get_query_types_default):
Routine docs.
(gst_pad_set_link_function, gst_pad_set_fixate_function)
(gst_pad_set_getcaps_function): Doc from Dave's negotation random
doc.
(gst_pad_unlink, gst_pad_is_linked): Docs.
(gst_pad_renegotiate): A brief description of capsnego.
(gst_pad_try_set_caps): Document.
(gst_pad_try_set_caps_nonfixed): Document.
(gst_pad_can_link_filtered, gst_pad_link_filtered): Doc fixes.
(gst_pad_set_parent): Deprecated (although not out of the API).
(gst_pad_get_parent): Deprecated, although many plugins use this.
(gst_pad_add_ghost_pad, gst_pad_remove_ghost_pad): Doc that these
are private and will go away in 0.9.
(gst_pad_perform_negotiate): Doc.
(gst_pad_link_unnegotiate): I think this is meant to be static.
(gst_pad_get_negotiated_caps, gst_pad_get_pad_template_caps)
(gst_pad_template_get_caps_by_name, gst_pad_check_compatibility)
(gst_pad_get_peer): Doc updates.
(gst_pad_caps_change_notify): Doc.
(gst_pad_alloc_buffer, gst_pad_push, gst_static_pad_template_get)
(gst_ghost_pad_new): Doc fixes.
* gst/gstobject.c (gst_object_get_parent, gst_object_unparent)
(gst_object_check_uniqueness):
* gst/gstelement.c (gst_element_add_pad)
(gst_element_add_ghost_pad, gst_element_remove_pad)
(gst_element_remove_ghost_pad, gst_element_get_pad)
(gst_element_get_static_pad, gst_element_get_pad_list)
(gst_element_class_get_pad_template_list)
(gst_element_class_get_pad_template): Work on the docs.
(gst_element_get_pad_template_list): Uses the class method.
(gst_element_get_compatible_pad_template): Docs, and consolidate
some test conditions.
(gst_element_get_pad_from_template): New static function.
(gst_element_request_compatible_pad): Docs, and work with
non-request compatible templates.
(gst_element_get_compatible_pad_filtered): Docs and remove
redundant checks.
(gst_element_get_compatible_pad, gst_element_link_pads_filtered)
(gst_element_link_filtered, gst_element_link_many)
(gst_element_link, gst_element_link_pads)
(gst_element_unlink_many): Docs.
2004-02-05 Andy Wingo <wingo@pobox.com>
* gst/gstpad.c (_gst_real_pad_fixate_accumulator):
s/pointer/boxed/.
* gst/gstmarshal.list (VOID:BOXED, BOXED:BOXED): New marshallers.
* gst/gstpad.c (gst_real_pad_class_init): Use a BOXED:BOXED
marshaller for ::fixate, and VOID:BOXED for ::caps-nego-failed,
with the type=GST_TYPE_CAPS. This allows language bindings to know
what kind of data they're dealing with.
* gst/gstcaps.c (_gst_caps_value_init): GBoxed values initialize
to NULL when g_value_init is called. GstCaps, which rolls its own
type implementation, now does the same instead of allocating empty
caps.
(_gst_caps_initialize, _gst_caps_collect_value,
_gst_caps_lcopy_value): Provide collect_value and lcopy_value type
table methods. This allows G_VALUE_COLLECT to work.
2004-02-05 Andy Wingo <wingo@pobox.com>
* configure.ac:
* testsuite/Makefile.am (SUBDIRS):
* testsuite/ghostpads/Makefile.am:
* testsuite/ghostpads/ghostpads.c: A new test for ghost pads.
* gst/gstpad.c (gst_pad_add_ghost_pad, gst_pad_remove_ghost_pad):
These two routines are the only ones that set
GST_GPAD_REALPAD(gpad), the ghost pad list, and the ghost pad's
pad template. They should be made static, depending on ABI needs.
(gst_real_pad_dispose): Handle the case of ghost pads without a
parent. Assert after dealing with ghost pads that the ghost pad
list is empty.
(gst_ghost_pad_class_init): New property added, ::real-pad. Can be
set after creation.
(gst_ghost_pad_dispose): Set ::real-pad to NULL.
(gst_ghost_pad_set_property, gst_ghost_pad_get_property): New
functions. set_property will call add_ghost_pad/remove_ghost_pad
as appropriate.
(gst_ghost_pad_new): All the work is offloaded to g_object_new.
* gst/gstelement.c (gst_element_add_pad): Handle ghost pads as well.
(gst_element_add_ghost_pad): Remove code duplicated from _add_pad.
(gst_element_remove_pad): Handle ghost pads as well.
(gst_element_remove_ghost_pad): Deprecated (could be removed,
depending on API-stability needs).
2004-02-05 Andy Wingo <wingo@pobox.com>
* gst/gstbin.[ch]: (gst_bin_get_by_interface): GTypes are scalars,
of course they're const
Original commit message from CVS:
* gst/gstpad.c: (gst_pad_link_intersect), (gst_pad_link_fixate),
(gst_pad_try_set_caps): Fix format strings for GST_PTR_FORMAT.
Original commit message from CVS:
2004-02-10 Julien MOUTTE <julien@moutte.net>
* gst/gstevent.c: (_gst_event_free): Sometimes a tag event arrives but
the structure does not contain a valid tag list. Adding a safety check
to remove a noisy warning in that case.
Original commit message from CVS:
2004-02-09 Julien MOUTTE <julien@moutte.net>
* gst/gstdata.c: (gst_data_ref): Adding a categorized debug on data_ref
because data_unref has one and i prefer the debug to be symetric.
* gst/gstqueue.c: (gst_queue_locked_flush): Fix a huge memleak. Buffers
were refed when added to the queue and unrefed only once when the queue
was flushed. Now the flush handler unref the buffers two times : first
unref for the ref added when pushing in the queue's tail and second
unref to destroy the flushed buffer.