mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-10-04 01:32:42 +00:00
Add GST_PAD_PROBE_TYPE_HANDLE_FLUSH
This commit is contained in:
parent
3663167582
commit
8e6b5f79bd
2 changed files with 13 additions and 13 deletions
20
gst/gstpad.c
20
gst/gstpad.c
|
@ -2818,6 +2818,10 @@ probe_hook_marshal (GHook * hook, ProbeMarshall * data)
|
||||||
if ((type & GST_PAD_PROBE_TYPE_BLOCKING) &&
|
if ((type & GST_PAD_PROBE_TYPE_BLOCKING) &&
|
||||||
(flags & GST_PAD_PROBE_TYPE_BLOCKING & type) == 0)
|
(flags & GST_PAD_PROBE_TYPE_BLOCKING & type) == 0)
|
||||||
goto no_match;
|
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,
|
GST_CAT_LOG_OBJECT (GST_CAT_SCHEDULING, pad,
|
||||||
"hook %lu with flags 0x%08x matches", hook->hook_id, flags);
|
"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:
|
case GST_EVENT_FLUSH_START:
|
||||||
GST_PAD_SET_FLUSHING (pad);
|
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);
|
GST_PAD_BLOCK_BROADCAST (pad);
|
||||||
goto flushed;
|
type |= GST_PAD_PROBE_TYPE_HANDLE_FLUSH;
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case GST_EVENT_FLUSH_STOP:
|
case GST_EVENT_FLUSH_STOP:
|
||||||
GST_PAD_UNSET_FLUSHING (pad);
|
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");
|
GST_LOG_OBJECT (pad, "Removing pending EOS events");
|
||||||
remove_event_by_type (pad, GST_EVENT_EOS);
|
remove_event_by_type (pad, GST_EVENT_EOS);
|
||||||
|
|
||||||
if (G_UNLIKELY (GST_PAD_IS_BLOCKED (pad))) {
|
type |= GST_PAD_PROBE_TYPE_HANDLE_FLUSH;
|
||||||
GST_LOG_OBJECT (pad, "Pad is blocked, not forwarding flush-stop");
|
|
||||||
goto flushed;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
|
|
|
@ -469,6 +469,10 @@ typedef enum
|
||||||
/* flags to select scheduling mode */
|
/* flags to select scheduling mode */
|
||||||
GST_PAD_PROBE_TYPE_PUSH = (1 << 12),
|
GST_PAD_PROBE_TYPE_PUSH = (1 << 12),
|
||||||
GST_PAD_PROBE_TYPE_PULL = (1 << 13),
|
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;
|
} GstPadProbeType;
|
||||||
|
|
||||||
#define GST_PAD_PROBE_TYPE_BLOCKING (GST_PAD_PROBE_TYPE_IDLE | GST_PAD_PROBE_TYPE_BLOCK)
|
#define GST_PAD_PROBE_TYPE_BLOCKING (GST_PAD_PROBE_TYPE_IDLE | GST_PAD_PROBE_TYPE_BLOCK)
|
||||||
|
|
Loading…
Reference in a new issue