Add GST_PAD_PROBE_TYPE_HANDLE_FLUSH

This commit is contained in:
Matej Knopp 2011-12-05 21:20:52 +01:00 committed by Wim Taymans
parent 3663167582
commit 8e6b5f79bd
2 changed files with 13 additions and 13 deletions

View file

@ -2818,6 +2818,10 @@ probe_hook_marshal (GHook * hook, ProbeMarshall * data)
if ((type & GST_PAD_PROBE_TYPE_BLOCKING) &&
(flags & GST_PAD_PROBE_TYPE_BLOCKING & type) == 0)
goto no_match;
/* only probes that have GST_PAD_PROBE_TYPE_HANDLE_FLUSH set */
if ((type & GST_PAD_PROBE_TYPE_HANDLE_FLUSH) &&
(flags & GST_PAD_PROBE_TYPE_HANDLE_FLUSH & type) == 0)
goto no_match;
GST_CAT_LOG_OBJECT (GST_CAT_SCHEDULING, pad,
"hook %lu with flags 0x%08x matches", hook->hook_id, flags);
@ -3990,15 +3994,9 @@ gst_pad_push_event_unchecked (GstPad * pad, GstEvent * event,
case GST_EVENT_FLUSH_START:
GST_PAD_SET_FLUSHING (pad);
if (G_UNLIKELY (GST_PAD_IS_BLOCKED (pad))) {
/* flush start will have set the FLUSHING flag and will then
* unlock all threads doing a GCond wait on the blocking pad. This
* will typically unblock the STREAMING thread blocked on a pad. */
GST_LOG_OBJECT (pad, "Pad is blocked, not forwarding flush-start, "
"doing block signal.");
GST_PAD_BLOCK_BROADCAST (pad);
goto flushed;
}
GST_PAD_BLOCK_BROADCAST (pad);
type |= GST_PAD_PROBE_TYPE_HANDLE_FLUSH;
break;
case GST_EVENT_FLUSH_STOP:
GST_PAD_UNSET_FLUSHING (pad);
@ -4007,10 +4005,8 @@ gst_pad_push_event_unchecked (GstPad * pad, GstEvent * event,
GST_LOG_OBJECT (pad, "Removing pending EOS events");
remove_event_by_type (pad, GST_EVENT_EOS);
if (G_UNLIKELY (GST_PAD_IS_BLOCKED (pad))) {
GST_LOG_OBJECT (pad, "Pad is blocked, not forwarding flush-stop");
goto flushed;
}
type |= GST_PAD_PROBE_TYPE_HANDLE_FLUSH;
break;
default:
{

View file

@ -469,6 +469,10 @@ typedef enum
/* flags to select scheduling mode */
GST_PAD_PROBE_TYPE_PUSH = (1 << 12),
GST_PAD_PROBE_TYPE_PULL = (1 << 13),
/* flag for event probes that want to handle flush events.
The probe can drop flush event which will mean that the rest
of the pipeline will not get flushed */
GST_PAD_PROBE_TYPE_HANDLE_FLUSH = (1 << 14)
} GstPadProbeType;
#define GST_PAD_PROBE_TYPE_BLOCKING (GST_PAD_PROBE_TYPE_IDLE | GST_PAD_PROBE_TYPE_BLOCK)