Original commit message from CVS:
Patch by: <syrjala at sci dot fi>
* gst/gstpad.c: (gst_pad_alloc_buffer_full), (gst_pad_send_event):
Fix possible deadlock if pad eventfunc is not specified. Fixes#421177.
Improve debugging.
Original commit message from CVS:
* docs/design/draft-tagreading.txt:
* docs/random/ensonic/audiobaseclasses.txt:
Do some Architect work.
* gst/gstobject.c: (gst_object_set_name):
Add a WARNING.
* gst/gstpad.c:
Add docs that point from gst_pad_get_range to gst_pad_pull_range
Original commit message from CVS:
* docs/design/part-gstghostpad.txt:
* gst/gstghostpad.c: (gst_ghost_pad_dispose),
(gst_ghost_pad_new_full):
Make the ghostpad a parent of the internal pad again for better backward
compatibility. Don't write code that relies on this however.
* gst/gstpad.c: (gst_pad_activate_pull), (gst_pad_activate_push),
(gst_pad_link_check_hierarchy):
Require that parents should be GstElements in the hierarchy check.
Original commit message from CVS:
* docs/design/part-gstghostpad.txt:
* gst/gstghostpad.c: (gst_ghost_pad_class_init),
(gst_ghost_pad_internal_do_activate_push),
(gst_ghost_pad_internal_do_activate_pull),
(gst_ghost_pad_do_activate_push), (gst_ghost_pad_do_activate_pull),
(gst_ghost_pad_do_link), (gst_ghost_pad_dispose),
(gst_ghost_pad_new_full), (gst_ghost_pad_set_target):
Do not set the internal pad as a parent anymore so we can avoid
hierarchy linking errors when the ghostpad has no parent yet. This also
fixes failed activation because of unlinked internal pads, which in
turn fixes the impossible case where you have to activate a pad before
you can add it to a running element.
Also fix the docs.
* gst/gstpad.c: (pre_activate), (post_activate),
(gst_pad_set_active), (gst_pad_activate_pull),
(gst_pad_activate_push), (gst_pad_check_pull_range):
Add some more debug info.
Mark activation mode in pre_activate so that we don't try to activate in
endless loops. Fixes#385084.
Original commit message from CVS:
* gst/gstpad.c: (gst_pad_get_internal_links_default),
(gst_pad_dispatcher):
Improve debugging of default pad dispatcher and query functions.
Original commit message from CVS:
2007-01-13 Andy Wingo <wingo@pobox.com>
* gst/gstpad.c (gst_pad_get_range, gst_pad_pull_range): Allow
getrange() to return buffers with other caps, while we fix
demuxers and typefind, or otherwise change part-negotiation.txt.
Original commit message from CVS:
2007-01-12 Andy Wingo <wingo@pobox.com>
* gst/gstpad.c (gst_pad_activate_pull): Refuse to activate unlinked
sink pads in pull mode. In addition to being correct, fixes
filesrc ! decodebin ! identity ! fakesink.
(gst_pad_get_range, gst_pad_pull_range): Don't call
gst_pad_set_caps() if the caps changes; instead error out with
GST_FLOW_NOT_NEGOTIATED, as discussed in part-negotiation.txt.
Original commit message from CVS:
2007-01-10 Andy Wingo <wingo@pobox.com>
* docs/design/part-negotiation.txt: Update with, um, one way that
pull-mode negotiation might work?
* gst/gstpad.h:
* gst/gstpad.c (gst_pad_get_allowed_caps): Remove the restriction
that the pad must be a src pad; makes sense to call it the other
way in pull mode, and the logic is symmetric anyway.
Original commit message from CVS:
2007-01-06 Andy Wingo <wingo@pobox.com>
* gst/gstpad.c (gst_pad_get_range, gst_pad_pull_range): Set caps
on the pads if necessary, as in push()/chain(). Update docs.
Shouldn't affect existing pull() usage as it is currently only
being used on buffers without caps.
Original commit message from CVS:
* gst/gstelement.c: (gst_element_add_pad):
* gst/gstghostpad.c: (gst_ghost_pad_new_full):
* gst/gstpad.c: (gst_pad_init):
Set pads to FLUSHING when they are created. Check, warn and fix when a
demuxer adds an inactive pad to itself when running. Fixes#339326.
Original commit message from CVS:
Patch by: Mark Nauwelaerts <manauw at skynet dot be>
* gst/gstpad.c:
Fix documentation for gst_pad_dispatcher. Fixes#374475.
Original commit message from CVS:
Patch by: Mark Nauwelaerts <manauw at skynet dot be>
* gst/gstpad.c: (gst_pad_init), (pre_activate),
(gst_pad_set_blocked_async), (gst_pad_acceptcaps_default),
(gst_pad_accept_caps), (handle_pad_block), (gst_pad_push_event):
Some small cleanups. Improve debugging.
* gst/gstpad.h:
Signal all waiting threads with a broadcast instead of just one.
Fixes#369942.
Original commit message from CVS:
* docs/design/part-events.txt:
Update some docs.
* docs/design/part-block.txt:
* gst/gstpad.c: (gst_pad_is_blocking), (handle_pad_block),
(gst_pad_push_event):
Revert BLOCKING patch, it tries to be smart without really having a
clear idea what or how. So, now we discard all FLUSHING events again on
a blocking pad. Should fix gnonlin again.
Original commit message from CVS:
* gst/gstelement.h:
Clarify _NO_PREROLL a bit more.
* gst/gstevent.c:
Fix docs.
* gst/gstpad.c: (gst_pad_link_check_hierarchy),
(gst_pad_get_caps_unlocked), (gst_pad_save_thyself),
(handle_pad_block), (gst_pad_push_event), (gst_pad_send_event):
Patch by: Yves Lefebvre <ivanohe at abacom dot com> Fix possible deadlock
due to wrong locking order. Fixes#361769.
Remove some redundant/misplaced checks in pad_block.
* libs/gst/base/gstbasesink.c: (gst_base_sink_get_position):
For negative rates, count backwards from the duration.
Original commit message from CVS:
Patch by: Sebastien Cote <sebas642 at yahoo dot ca>
* gst/gstpad.c: (gst_pad_get_caps_unlocked),
(gst_pad_save_thyself):
Update some docs.
Write pad direction in XML output. Fixes#345496.
Original commit message from CVS:
* docs/design/part-block.txt:
Further explain the use of flushing on blocked pads.
* docs/gst/gstreamer-sections.txt:
* gst/gstpad.c: (gst_pad_is_blocking), (handle_pad_block),
(gst_pad_push_event):
* gst/gstpad.h:
Added new GstPadFlag : GST_PAD_BLOCKING.
Adds the notion of pads really blocking, which enables to properly
handle FLUSH_START/FLUSH_STOP events on blocked pads.
Fixes#358999
API: gst_pad_is_blocking()
API: GST_PAD_IS_BLOCKING() macro
API: GST_PAD_BLOCKING GstPadFlag
Original commit message from CVS:
* gst/gstinfo.c: (_gst_debug_nameof_funcptr):
Fix locking order, handle NULL function values properly.
* gst/gstinfo.h:
Fix docs.
* gst/gstpad.c: (gst_pad_buffer_alloc_unchecked):
Initialised variable before using it and fix debug statement to
print the address of the function rather than the address of the
variable on the stack holding the address of the function.
Original commit message from CVS:
* gst/gstpad.c: (gst_pad_start_task), (gst_pad_pause_task),
(gst_pad_stop_task):
Improve debugging for task functions.
* gst/gsttask.c: (gst_task_func), (gst_task_set_lock),
(gst_task_start), (gst_task_pause), (gst_task_join):
Make sure that the task function started and finished after a
join().
Don't try to push the task function on the threadpool multiple
times.
Improve the g_warning message with some useful suggestions
about how to fix the problem.
Original commit message from CVS:
* gst/gst.c:
* gst/gstpad.c: (gst_pad_set_active):
* libs/gst/base/gstbasetransform.c:
(gst_base_transform_transform_caps):
Simplify caps to get rid of duplicates, fixes#345444
Original commit message from CVS:
* gst/gstbuffer.c:
* gst/gsttask.c: (gst_task_join):
Small doc updates.
* gst/gstpad.c: (gst_pad_activate_pull), (gst_pad_activate_push),
(gst_pad_stop_task):
When pad (de)activation failed for some reason, restore the old
activation mode and set the pad to flushing instead of assuming the
pad is deactivated.
If the _task_join() failed, reinstall the task on the pad so that it can
be stopped later and return an error.
Original commit message from CVS:
* gst/gstpad.c: (gst_pad_class_init), (gst_pad_dispose),
(gst_pad_get_property), (gst_pad_activate_pull),
(gst_pad_activate_push), (gst_pad_set_blocked_async),
(gst_pad_set_activate_function),
(gst_pad_set_activatepull_function),
(gst_pad_set_activatepush_function), (gst_pad_set_chain_function),
(gst_pad_set_getrange_function),
(gst_pad_set_checkgetrange_function), (gst_pad_set_event_function),
(gst_pad_set_query_function), (gst_pad_set_query_type_function),
(gst_pad_set_internal_link_function), (gst_pad_set_link_function),
(gst_pad_set_unlink_function), (gst_pad_set_getcaps_function),
(gst_pad_set_acceptcaps_function),
(gst_pad_set_fixatecaps_function), (gst_pad_set_setcaps_function),
(gst_pad_set_bufferalloc_function), (gst_pad_link_check_hierarchy),
(gst_pad_get_caps_unlocked), (gst_pad_get_caps),
(gst_pad_peer_get_caps), (gst_pad_accept_caps),
(gst_pad_peer_accept_caps), (gst_pad_set_caps),
(gst_pad_configure_sink), (gst_pad_configure_src),
(gst_pad_get_allowed_caps), (gst_pad_get_negotiated_caps),
(gst_pad_buffer_alloc_unchecked), (gst_pad_alloc_buffer_full),
(gst_pad_query), (gst_pad_load_and_link), (handle_pad_block),
(gst_pad_chain_unchecked), (gst_pad_push), (gst_pad_get_range),
(gst_pad_send_event):
Use _DEBUG_OBJECT when it makes sense.
Protect GST_PAD_CAPS with the OBJECT_LOCK.
Small cleanups and code reflows.
Avoid caps refcounting in _accept_caps.
Refactor alloc_buffer so that the code performed on the peer is in a
separate function. Also if the pad does not implement a buffer alloc
function, we should still check if the pad is flushing before falling
back to the default allocator.
Original commit message from CVS:
* gst/gstbin.c: (activate_pads),
(iterator_activate_fold_with_resync), (gst_bin_src_pads_activate),
(gst_bin_change_state_func):
(de)activate src pads before calling state_change on the childs.
This is to avoid the case where a src ghostpad is blocked (holding the
stream lock), which would block the deactivation of the ghostpad's
target pad.
* gst/gstghostpad.c: (gst_proxy_pad_do_query_type),
(gst_proxy_pad_do_event), (gst_proxy_pad_do_query),
(gst_proxy_pad_do_internal_link), (gst_proxy_pad_do_bufferalloc),
(gst_proxy_pad_do_chain), (gst_proxy_pad_do_getrange),
(gst_proxy_pad_do_checkgetrange), (gst_proxy_pad_do_getcaps),
(gst_proxy_pad_do_acceptcaps), (gst_proxy_pad_do_fixatecaps),
(gst_proxy_pad_do_setcaps), (gst_proxy_pad_set_target_unlocked),
(gst_proxy_pad_set_target), (gst_proxy_pad_get_internal),
(gst_proxy_pad_dispose), (gst_proxy_pad_init),
(gst_ghost_pad_parent_set), (gst_ghost_pad_parent_unset),
(gst_ghost_pad_class_init),
(gst_ghost_pad_internal_do_activate_push),
(gst_ghost_pad_internal_do_activate_pull),
(gst_ghost_pad_do_activate_push), (gst_ghost_pad_do_activate_pull),
(gst_ghost_pad_do_link), (gst_ghost_pad_do_unlink),
(gst_ghost_pad_dispose), (gst_ghost_pad_new_no_target),
(gst_ghost_pad_new), (gst_ghost_pad_set_target):
GhostPads now create their internal GstProxyPad at creation (and not
when they're linked, as it was being done previously).
The internal and target pads are linked straight away.
The data will also travel through the other pad in order to make
pad blocking and probes non-hackish (the probe/block now really happens
on the GhostPad and not on the target).
* gst/gstpad.c: (gst_pad_set_blocked_async),
(gst_pad_link_prepare), (gst_pad_push_event):
Remove previous ghostpad cruft.
* gst/gstutils.c: (gst_pad_add_data_probe),
(gst_pad_add_event_probe), (gst_pad_add_buffer_probe),
(gst_pad_remove_data_probe), (gst_pad_remove_event_probe),
(gst_pad_remove_buffer_probe):
Remove previous ghost pad cruft.
Added more detailed debug statements.
* tests/check/gst/gstghostpad.c: (GST_START_TEST):
Fix the testsuite for refcounting changes.
The comments about who has references were correct, but the refcount
being checked wasn't the same (!?!).
Original commit message from CVS:
* gst/gstpad.c: (gst_pad_init), (gst_pad_activate_pull),
(gst_pad_activate_push):
Use some more macros where it makes sense.
Allow pad mode switching instead of asserting. When a pad
is activated in one mode and we activate it in another,
deactivate it first before activating it in a different mode.
Fixes#329198.
Original commit message from CVS:
* gst/gstpad.c: (gst_pad_chain_unchecked), (gst_pad_chain),
(gst_pad_push), (gst_pad_check_pull_range), (gst_pad_get_range),
(gst_pad_pull_range):
* gst/gstpad.h:
Lots of comments and docs added to the pad functions.
Flesh out the expected behaviour of the get_range() functions.
Original commit message from CVS:
* gst/gstpad.c: (handle_pad_block), (gst_pad_push_event):
Implement pad blocking on events according to part-block.txt.
More comments on behaviour.
* tests/check/gst/gstevent.c: (test_event):
Send event to peer pad of blocked pad (else it will block).
Original commit message from CVS:
* gst/gstpad.c: (gst_flow_get_name), (gst_flow_to_quark):
* gst/gstpad.h:
Added _CUSTOM error and success GstFlowReturn that can be
used be elements internally.
Added macro to check for SUCCESS flowreturns.
API: GST_FLOW_CUSTOM_SUCCESS
API: GST_FLOW_CUSTOM_ERROR
API: GST_FLOW_IS_SUCCESS
* tests/check/gst/gstpad.c: (GST_START_TEST), (gst_pad_suite):
Added check for GstFlowReturn sanity.
Original commit message from CVS:
* gst/gstpad.c: (gst_pad_set_caps):
Short-circuit gst_pad_set_caps if setting the existing
caps pointer again, and avoid printing debug and
reffing/unreffing the caps.
* plugins/elements/gstqueue.c: (gst_queue_push_one):
There's actually no need to set the caps before pushing -
the acceptcaps method will handle it anyway.
Original commit message from CVS:
* gst/gstpad.c: (gst_pad_init), (gst_pad_configure_sink),
(gst_pad_configure_src), (gst_pad_push):
Restore acceptcaps checking behaviour now that good plugins have
been released.
Original commit message from CVS:
* gst/gstpad.c: (gst_pad_link):
Must set peer pads before calling the link function, otherwise
a task started from a link function might get a flow-not-linked
result when trying to push because the other thread where the
linking happens hasn't had a chance to set the peers yet. This
might happen for example when a queue gets linked to a downstream
element, as queue starts a streaming task when its source pad
gets linked. Happens in real life when playing back flac/musepack
files in playbin (#332390).
Original commit message from CVS:
* gst/gstpad.c: (gst_pad_set_property):
Use g_value_get_object() instead of g_value_dup_gst_object(),
to avoid double-reffing the pad template (which we then sink,
so this worked previously if (and only if) the pad template
was floating.
* gst/gstpadtemplate.c: (gst_pad_template_init),
(gst_pad_template_pad_created):
Never return floating references to pad templates, create
them as initially-sunken.
Document an extra function (and make this stop sinking our
pad template, since that is now guaranteed to do nothing,
since we created it sunken).
* gst/gstghostpad.c:
Fix docs typo.
Original commit message from CVS:
2006-04-05 Andy Wingo <wingo@pobox.com>
* gst/gstpad.c (gst_pad_set_blocked_async): More debug.
* libs/gst/base/gstbasetransform.c
(gst_base_transform_sink_eventfunc): When resetting our segment on
FLUSH_STOP, also update the flag saying we haven't seen a
newsegment.
Original commit message from CVS:
* gst/gstpad.c: (gst_pad_accept_caps), (gst_pad_alloc_buffer_full),
(gst_pad_push):
Don't leak buffers, caps and pads on negotiation errors.
Original commit message from CVS:
* gst/gstpad.c: (gst_pad_accept_caps), (gst_pad_alloc_buffer_full),
(gst_pad_push):
Don't pound the cpu to pieces by checking get_caps when accept_caps
is called with the same caps as the pad already has.
Use GST_DEBUG_OBJECT when outputting caps change information.
Original commit message from CVS:
* gst/gstbuffer.h:
Documentation fix.
* gst/gstpad.c: (gst_pad_init), (gst_pad_acceptcaps_default),
(gst_pad_accept_caps), (gst_pad_configure_sink),
(gst_pad_configure_src), (gst_pad_chain), (gst_pad_push):
Make the default acceptcaps behaviour be to check the requested
caps against the gst_pad_get_caps output.
Ensure that gst_pad_accept_caps is used to check caps when a pad
doesn't have a setcaps function, so that pads automatically refuse
caps that they don't allow in their pad template. (Fixes#332986)
When a buffer with attached caps is pushed, ensure that the source
pad receives those caps even if the element didn't call
gst_pad_set_caps first.