Original commit message from CVS:
- removing some trailing commas in enums to please C90 only compilers (AIX, Forte, ...)
('should' fix#143290)
should/could we compile gst with -ansi -pedantic to catch those in the build-bots ?
Original commit message from CVS:
* gst/schedulers/gstoptimalscheduler.c: (remove_from_chain),
(chain_group_set_enabled), (create_group), (add_to_group),
(merge_groups), (setup_group_scheduler), (group_elements),
(gst_opt_scheduler_iterate), (gst_opt_scheduler_show):
Don't try to follow the pad connections with other groups
when a loop based element is added to the scheduler because
the bin will inform the scheduler about the pad links a little
later.
Original commit message from CVS:
* gst/schedulers/gstoptimalscheduler.c: (add_to_chain),
(remove_from_chain), (chain_group_set_enabled),
(setup_group_scheduler), (group_element_set_enabled),
(gst_opt_scheduler_state_transition), (gst_opt_scheduler_iterate),
(gst_opt_scheduler_show):
Elements without a group can do a state change as well, just wait
with the setup of the scheduling function when it is added to a
chain.
Original commit message from CVS:
* gst/schedulers/gstoptimalscheduler.c: (add_to_chain),
(remove_from_chain), (chain_group_set_enabled), (add_to_group),
(merge_groups), (setup_group_scheduler),
(group_inc_links_for_element), (gst_opt_scheduler_iterate),
(gst_opt_scheduler_show):
Fixes to maintain internal consistency of the scheduler data
structures.
- adding an enabled group to a chain should increment the
number of enabled elements in that chain.
- removing an enabled group from a chain could disable the
chain.
- removing a disabled group from a chain could enable the
chain.
- add g_assert when internal inconsistency is detected.
- adding an element to a group could increase the number of
links this group has with other groups.
- merging two groups also merges the chains.
- also show group links in the _show method.
Please report regressions ASAP, so I can fix them.
Original commit message from CVS:
* gst/gstbin.c: (gst_bin_iterate_func), (gst_bin_iterate):
don't
* gst/schedulers/entryscheduler.c: (safe_cothread_switch),
(safe_cothread_destroy),
(gst_entry_scheduler_remove_all_cothreads),
(gst_entry_scheduler_reset), (_remove_cothread),
(gst_entry_scheduler_state_transition):
hold off cothread destruction if we're not in main cothread
* configure.ac:
* testsuite/Makefile.am:
add new test dir
* testsuite/schedulers/.cvsignore:
* testsuite/schedulers/Makefile.am:
add tests
* testsuite/schedulers/relink.c: (cb_handoff), (main):
check relinking and adding/removing elements from a running pipeline
* testsuite/schedulers/unlink.c: (cb_handoff), (main):
check unlinking in a running pipeline
* testsuite/schedulers/unref.c: (cb_handoff), (main):
check unreffing a running pipeline
* testsuite/schedulers/useless_iteration.c: (main):
check iterating a pipeline that contains running threads works
Original commit message from CVS:
* gst/schedulers/gstoptimalscheduler.c: (remove_from_group),
(setup_group_scheduler), (gst_opt_scheduler_pad_link):
Fixed an error introduced with patch for 1.63. When setting
a get based element as the entry point in a group, make sure
to mark the group as GET based.
Original commit message from CVS:
* gst/schedulers/gstoptimalscheduler.c: (create_group),
(setup_group_scheduler), (loop_group_schedule_function),
(gst_opt_scheduler_pad_link):
Added some more debug info and fixed a bug where the group
type was set to LOOP but it was in fact unknown.
Original commit message from CVS:
* gst/gstelement.c: (gst_element_class_init):
whoops, store the signal id correctly
* gst/schedulers/gstbasicscheduler.c:
(gst_basic_scheduler_chain_wrapper):
detect infinfinfinfinfinf^Cinite loops in chain wrapper when the
chain function isn't linked
Original commit message from CVS:
* gst/schedulers/gstoptimalscheduler.c: (remove_from_group),
(group_dec_link), (gst_opt_scheduler_pad_unlink):
when removing an element from a group, we always need to
decrement the link count that this group had with other
groups through the element.
added an extra assert to catch inconsistencies when decrementing
the link count.
Original commit message from CVS:
* gst/schedulers/gstoptimalscheduler.c
(gst_opt_scheduler_pad_unlink): Check if element is non-NULL and
really is a GstElement. Avoids critical when running gst-launch -v
and a oggdemux/decoding pipeline.
Original commit message from CVS:
reviewed by Benjamin Otte <otte@gnome.org>
* gst/schedulers/gthread-cothreads.h:
free allocated data for main cothread, too when destroying context
(fixes#141417)
Original commit message from CVS:
* gst/autoplug/Makefile.am: Fix some little buglets in last checkin.
* gst/indexers/Makefile.am:
* gst/schedulers/Makefile.am:
* libs/gst/bytestream/Makefile.am:
* libs/gst/control/Makefile.am:
* libs/gst/getbits/Makefile.am:
Original commit message from CVS:
* common/as-libtool.mak: Fine-tune DLL building.
* configure.ac: Link plugins against libgstreamer. Define plugindir
(like gst-plugins)
* examples/plugins/Makefile.am: remove plugindir
* gst/autoplug/Makefile.am: DLL building fixes
* gst/elements/Makefile.am: DLL building fixes. Disable pipefilter on
Windows.
* gst/elements/gstelements.c: Conditionally disable pipefilter.
* gst/indexers/Makefile.am: DLL building fixes
* gst/schedulers/Makefile.am: DLL building fixes.
* libs/gst/bytestream/Makefile.am: DLL building fixes.
* libs/gst/control/Makefile.am: same
* libs/gst/getbits/Makefile.am: same
* testsuite/Makefile.am: New dlopen directory
* testsuite/dlopen/Makefile.am: Tests to check if libgstreamer works
when dlopened.
* testsuite/dlopen/dlopen_gst.c: (main): same
* testsuite/dlopen/loadgst.c: (do_test): same
Original commit message from CVS:
* gst/schedulers/entryscheduler.c:
(gst_entry_scheduler_yield):
refuse to yield when decoupled elements insist on doing that.
At least it's better than crashing
Original commit message from CVS:
* gst/gstpad.c: (gst_pad_set_active), (gst_pad_link_new),
(gst_pad_link_free), (gst_pad_link_try), (_invent_event),
(gst_pad_pull):
implement enforcing discont events before buffers are passed. This
allows state changes of only some elements and later correctly going
on where they left off (or in short: you can now set audio sinks to
NULL to release the device when the pipeline is paused)
* gst/gstpad.c: (gst_pad_call_chain_function),
(gst_pad_call_get_function):
* gst/gstpad.h:
add gst_pad_call_chain_function and gst_pad_call_get_function for
scheduler interaction. They are required because of the changes
above.
* gst/schedulers/entryscheduler.c: (get_buffer),
(gst_entry_scheduler_chain_wrapper),
(gst_entry_scheduler_get_wrapper),
(gst_entry_scheduler_state_transition),
(gst_entry_scheduler_pad_link):
* gst/schedulers/gstbasicscheduler.c:
(gst_basic_scheduler_chain_wrapper),
(gst_basic_scheduler_src_wrapper),
(gst_basic_scheduler_chainhandler_proxy),
(gst_basic_scheduler_gethandler_proxy),
(gst_basic_scheduler_cothreaded_chain),
(gst_basic_scheduler_chain_elements):
* gst/schedulers/gstoptimalscheduler.c:
(get_group_schedule_function), (pad_clear_queued),
(gst_opt_scheduler_pad_link):
use the new functions instead of calling get/chain-functions
directly.
Original commit message from CVS:
* configure.ac: Changes to remove POSIXisms (mmap in this case)
and to build DLLs on Windows.
* gst/Makefile.am:
* gst/elements/gstfilesrc.c: (gst_filesrc_get),
(gst_filesrc_open_file):
* gst/schedulers/Makefile.am:
Original commit message from CVS:
* gst/schedulers/gstbasicscheduler.c: (plugin_init):
rename categories to basic_*
* gst/schedulers/gstbasicscheduler.c:
(gst_basic_scheduler_chain_wrapper),
(gst_basic_scheduler_chainhandler_proxy),
(gst_basic_scheduler_gethandler_proxy),
(gst_basic_scheduler_eventhandler_proxy):
debugging category fixes - put common stuff in log category
* gst/schedulers/gstbasicscheduler.c:
(gst_basic_scheduler_chain_elements):
dirty fix: call gst_basic_scheduler_cothreaded_chain when already
active and linking two active chains
Original commit message from CVS:
* gst/schedulers/gstbasicscheduler.c:
make sure we can switch back to the main function if we're still in
the main function (supposed to fix#139617)
* gst/schedulers/gthread-cothreads.h:
don't throw an error when switching to the same cothread
Original commit message from CVS:
* gst/gstbuffer.h:
remove macro that wouldn't work anymore because struct member has
been removed.
* gst/schedulers/entryscheduler.c: (schedule_forward):
fix segfault for unconnected pads
Original commit message from CVS:
* gst/schedulers/entryscheduler.c: (some functions, dunno which,
prepareChangeLog doesn't work when cvs indents):
don't throw an error when no element can be scheduled, there's too
many weird reasons why it doesn't work. Return STOPPED instead.
decoupled elemts' schedulability doesn't depend on bufpens.
Original commit message from CVS:
* gst/gstpad.c: (gst_pad_collect_array), (gst_pad_collectv),
(gst_pad_collect), (gst_pad_collect_valist), (gst_pad_selectv),
(gst_pad_select):
* gst/gstpad.h:
* gst/gstscheduler.c: (gst_scheduler_pad_select),
(gst_scheduler_lock_element), (gst_scheduler_unlock_element):
* gst/gstscheduler.h:
implement gst_pad_collect as replacement for gst_pad_select.
deprecate gst_pad_select and gst_scheduler_(un)lock_element
add new flag GST_SCHEDULER_FLAG_NEW_API for API that implements the
new pad_select, lock and unlock calls.
* gst/cothreads.c: (cothread_destroy), (cothread_switch):
* gst/cothreads.h:
* gst/schedulers/cothreads_compat.h:
* gst/schedulers/gthread-cothreads.h:
remove unused cothread_lock and cothread_unlock calls
* gst/schedulers/entryscheduler.c:
(gst_entry_scheduler_class_init), (gst_entry_scheduler_init),
(_can_schedule_loop), (gst_entry_scheduler_get_handler),
(gst_entry_scheduler_pad_select):
update to new API
* gst/schedulers/gstbasicscheduler.c:
(gst_basic_scheduler_class_init), (gst_basic_scheduler_init),
(gst_basic_scheduler_pad_select):
remove useless lock and unlock calls, update pad_select to new API
(untested)
* gst/schedulers/gstoptimalscheduler.c:
(gst_opt_scheduler_class_init):
remove useless select, lock and unlock function calls
* gst/elements/gstaggregator.c: (gst_aggregator_loop):
use gst_pad_collect instead of gst_pad_select
Original commit message from CVS:
* gst/schedulers/entryscheduler.c: (_can_schedule_get),
(can_schedule_pad), (can_schedule), (schedule), (schedule_forward),
(schedule_next_element), (print_entry):
add can_schedule_pad to handle element states.
add schedule_forward to select the correct entry to schedule next
Original commit message from CVS:
* gst/schedulers/entryscheduler.c:
completely revamp the inner workings, so it's a lot easier to
understand and extend
Original commit message from CVS:
2004-04-03 Andy Wingo <wingo@pobox.com>
* gst/schedulers/gstoptimalscheduler.c (GstOptSchedulerGroupLink):
Rename ->group1 and ->group2 to ->src and ->sink, respectively.
This allows better introspection of pipeline topology.
(add_to_chain): Don't do trickery to put loop elements first;
rather, queue a chain sort by marking the chain as dirty.
(remove_from_chain): Mark the chain dirty.
(sort_chain): New function. Sorts the group list so that terminal
sinks are first. This means elements on the sink side will be
preferentially sscheduled before elements on the src side of the
pipeline.
(chain_recursively_migrate_group): Use OTHER_GROUP_LINK.
(schedule_chain): If the chain is marked DIRTY, call sort_chain.
(gst_opt_scheduler_pad_link, gst_opt_scheduler_pad_unlink)
(group_inc_link): Change argument and variable names to match the
new link structure member names (src and sink).
(group_dec_link): Add some description
Original commit message from CVS:
* gst/elements/gstbufferstore.c: (gst_buffer_store_get_buffer):
set the offset of the buffer to the requested offset
* gst/elements/gsttypefind.c: (stop_typefinding):
revert patch 1.18 (which I unfortunately don't know the reason for).
This is needed to allow downstream elements to seek. Otherwise
typefind might overwrite a previous seek by downstream elements.
This lead to errors with id3tag and typefind on some mp3s.
* gst/schedulers/entryscheduler.c: (COTHREADS_TYPE),
(gst_entry_scheduler_iterate):
be more verbose when debugging
Original commit message from CVS:
* gst/gstpad.c: (gst_pad_set_explicit_caps):
print caps in debugging output when setting caps failed
* gst/schedulers/entryscheduler.c: (COTHREADS_TYPE),
(schedule_next_element), (get_buffer), (run_chainhandler),
(element_may_start), (gst_entry_scheduler_chain_handler),
(gst_entry_scheduler_get_handler),
(gst_entry_scheduler_state_transition),
(gst_entry_scheduler_pad_link):
make this scheduler a testcase for mandatory
discont-before-first-buffer which is needed if we want to allow apps
to release the sound device.
add SCHED_ASSERT macro to print scheduler state before an assertion
triggers.
Original commit message from CVS:
* gst/gstbin.c: (gst_bin_set_element_sched),
(gst_bin_unset_element_sched):
don't add decoupled elements to schedulers - otherwise it's
impossible to control if a link to a decoupled element was already
removed from a scheduler or not.
* gst/schedulers/cothreads_compat.h:
* gst/schedulers/gthread-cothreads.h:
add COTHREADS_TYPE macro. Make do_cothread_set_func a macro so there
is no "unused" warning.
* gst/schedulers/Makefile.am:
* gst/schedulers/entryscheduler.c:
add new scheduler, based on ideas from talking to David and Martin.
It's supposed to be small and correct. Currently it's also slow (but
it's not noticable)
* examples/retag/retag.c: (main):
* testsuite/bytestream/test1.c: (main):
fix missing NULLs at end of variadic functions
* testsuite/elements/.cvsignore:
update
Original commit message from CVS:
* gst/schedulers/gstbasicscheduler.c:
(gst_basic_scheduler_src_wrapper):
* gst/schedulers/gstoptimalscheduler.c:
(gst_opt_scheduler_loop_wrapper), (gst_opt_scheduler_get_wrapper),
(pad_clear_queued), (gst_opt_scheduler_add_element),
(gst_opt_scheduler_remove_element):
fix GStreamer to not have issues with lvalue casts anymore (fixes
some bug, but bugzilla is down)
Original commit message from CVS:
* gst/gstelement.c:
add documentation about a gobject quirk where the object hasn't the
correct class pointer set on initialization
* gst/schedulers/gstbasicscheduler.c:
(gst_basic_scheduler_src_wrapper):
make sure to not run into an infinite loop
Original commit message from CVS:
* gst/schedulers/gstoptimalscheduler.c
(gst_opt_scheduler_pad_unlink): Fix bug that causes totem to
crash on MPEG playback. My boolean arithmetic is a bit rusty.
Original commit message from CVS:
* gst/schedulers/gstoptimalscheduler.c
(gst_opt_scheduler_pad_unlink): Implement unlink for elements with
links to elements within the same group, so we can finally remove
that annoying warning. Refactor the code a little bit
(group_dec_links_for_element): Split out
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:
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:
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.