O flushing? O
O WRONG_STATE O
O< - - - - - - - - - - - - - - -O
+ O O-> do BLOCK probes
+ O O
O O-> do DATA probes
O O
O O---> chainfunc /
It there is a valid DATA item, the DATA probes are called for the item.
- srcpad sinkpad
- | |
- | | gst_pad_pull_range()
- | O<---------------------
- | O
- | O flushing?
- | O WRONG_STATE
- | O - - - - - - - - - - >
- | do BLOCK probes <-O
- | O no peer?
- | O NOT_LINKED
- | O - - - - - - - - - - >
- | gst_pad_get_range() O
- O<------------------------------O
- O O
- O flushing? O
- O WRONG_STATE O
- O- - - - - - - - - - - - - - - >O
- getrangefunc <---O O
- O flow error? O
- O- - - - - - - - - - - - - - - >O
- O O
- do DATA probes <-O O
- O- - - - - - - - - - - - - - - >O
- | O
- | do IDLE probes <-O
- | O flow error?
- | O - - - - - - - - - - >
- | O
- | do DATA probes <-O
- | O - - - - - - - - - - >
- | |
+ srcpad sinkpad
+ | |
+ | | gst_pad_pull_range()
+ | O<---------------------
+ | O
+ | O flushing?
+ | O WRONG_STATE
+ | O - - - - - - - - - - >
+ | do BLOCK probes <-O
+ | O no peer?
+ | O NOT_LINKED
+ | O - - - - - - - - - - >
+ | gst_pad_get_range() O
+ O<------------------------------O
+ O O
+ O flushing? O
+ O WRONG_STATE O
+ O- - - - - - - - - - - - - - - >O
+ do BLOCK probes <-O O
+ O O
+ getrangefunc <---O O
+ O flow error? O
+ O- - - - - - - - - - - - - - - >O
+ O O
+ do DATA probes <-O O
+ O- - - - - - - - - - - - - - - >O
+ | O
+ | do IDLE probes <-O
+ | O flow error?
+ | O - - - - - - - - - - >
+ | O
+ | do DATA probes <-O
+ | O - - - - - - - - - - >
+ | |
goto events_error;
}
- PROBE (pad, GST_PAD_PROBE_TYPE_PUSH | type, data, probe_stopped);
+ PROBE (pad, type | GST_PAD_PROBE_TYPE_BLOCK, data, probe_stopped);
+
+ PROBE (pad, type, data, probe_stopped);
GST_OBJECT_UNLOCK (pad);
g_return_val_if_fail (GST_PAD_IS_SINK (pad), GST_FLOW_ERROR);
g_return_val_if_fail (GST_IS_BUFFER (buffer), GST_FLOW_ERROR);
- return gst_pad_chain_data_unchecked (pad, GST_PAD_PROBE_TYPE_BUFFER, buffer);
+ return gst_pad_chain_data_unchecked (pad,
+ GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_PUSH, buffer);
}
static GstFlowReturn
for (i = 0; i < len; i++) {
buffer = gst_buffer_list_get (list, i);
ret =
- gst_pad_chain_data_unchecked (pad, GST_PAD_PROBE_TYPE_BUFFER,
+ gst_pad_chain_data_unchecked (pad,
+ GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_PUSH,
gst_buffer_ref (buffer));
if (ret != GST_FLOW_OK)
break;
g_return_val_if_fail (GST_PAD_IS_SINK (pad), GST_FLOW_ERROR);
g_return_val_if_fail (GST_IS_BUFFER_LIST (list), GST_FLOW_ERROR);
- return gst_pad_chain_data_unchecked (pad, GST_PAD_PROBE_TYPE_BUFFER_LIST,
- list);
+ return gst_pad_chain_data_unchecked (pad,
+ GST_PAD_PROBE_TYPE_BUFFER_LIST | GST_PAD_PROBE_TYPE_PUSH, list);
}
static GstFlowReturn
if (G_UNLIKELY (GST_PAD_IS_FLUSHING (pad)))
goto flushing;
- type |= GST_PAD_PROBE_TYPE_PUSH;
-
/* do block probes */
PROBE (pad, type | GST_PAD_PROBE_TYPE_BLOCK, data, probe_stopped);
g_return_val_if_fail (GST_PAD_IS_SRC (pad), GST_FLOW_ERROR);
g_return_val_if_fail (GST_IS_BUFFER (buffer), GST_FLOW_ERROR);
- return gst_pad_push_data (pad, GST_PAD_PROBE_TYPE_BUFFER, buffer);
+ return gst_pad_push_data (pad,
+ GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_PUSH, buffer);
}
/**
g_return_val_if_fail (GST_PAD_IS_SRC (pad), GST_FLOW_ERROR);
g_return_val_if_fail (GST_IS_BUFFER_LIST (list), GST_FLOW_ERROR);
- return gst_pad_push_data (pad, GST_PAD_PROBE_TYPE_BUFFER_LIST, list);
+ return gst_pad_push_data (pad,
+ GST_PAD_PROBE_TYPE_BUFFER_LIST | GST_PAD_PROBE_TYPE_PUSH, list);
}
static GstFlowReturn
GST_OBJECT_LOCK (pad);
if (G_UNLIKELY (GST_PAD_IS_FLUSHING (pad)))
goto flushing;
+
+ PROBE (pad, GST_PAD_PROBE_TYPE_PULL | GST_PAD_PROBE_TYPE_BLOCK, NULL,
+ probe_stopped);
GST_OBJECT_UNLOCK (pad);
if (G_UNLIKELY ((getrangefunc = GST_PAD_GETRANGEFUNC (pad)) == NULL))
/* can only fire the signal if we have a valid buffer */
GST_OBJECT_LOCK (pad);
PROBE (pad, GST_PAD_PROBE_TYPE_PULL | GST_PAD_PROBE_TYPE_BUFFER, *buffer,
- probe_stopped);
+ probe_stopped_unref);
GST_OBJECT_UNLOCK (pad);
GST_PAD_STREAM_UNLOCK (pad);
"probe returned %s", gst_flow_get_name (ret));
GST_OBJECT_UNLOCK (pad);
GST_PAD_STREAM_UNLOCK (pad);
+ return ret;
+ }
+probe_stopped_unref:
+ {
+ GST_CAT_LOG_OBJECT (GST_CAT_SCHEDULING, pad,
+ "probe returned %s", gst_flow_get_name (ret));
+ GST_OBJECT_UNLOCK (pad);
+ GST_PAD_STREAM_UNLOCK (pad);
gst_buffer_unref (*buffer);
*buffer = NULL;
return ret;
if (G_UNLIKELY (GST_PAD_IS_FLUSHING (pad)))
goto flushing;
+ PROBE (pad,
+ GST_PAD_PROBE_TYPE_PUSH | GST_PAD_PROBE_TYPE_EVENT |
+ GST_PAD_PROBE_TYPE_BLOCK, event, probe_stopped);
+
PROBE (pad, GST_PAD_PROBE_TYPE_PUSH | GST_PAD_PROBE_TYPE_EVENT, event,
probe_stopped);