Adding buffer probe from within event probe callback

Krzysztof Konopko krzysztof.konopko at
Mon Apr 29 12:23:42 PDT 2013

2013/2/14 Krzysztof Konopko <krzysztof.konopko at>

> Ehlo good people,
> In my app I need to take some action before sending first buffer in a new
> segment.  To achieve this I tried the following:
> - add an event probe on a sink pad in my custom sink element
> - in an event probe callback find out if it's a segment event and add a
> buffer probe on the sink pad
> - in the buffer probe callback do my stuff and return GST_PAD_PROBE_REMOVE
> This unfortunately generates some spurious segment event duplicates once I
> try to add another probe within the first probe callback.
> The question is whether probes are "reentrant"--can I add a probe from
> another probe callback?
> Is this approach OK or maybe I'm barking up the wrong tree?
> I'm happy to investigate further if I'm not totally mistaken.  I've got an
> alternative approach that works but the one above seems to me more elegant
> (if not completely wrong).
> Thanks,
> Kris

There's either something utterly stupid I do or there's something wrong
with the probes mechanism.  I reproduced some misbehaviour with a small
example [1].

The following event probe callback:

static GstPadProbeReturn
event_probe(GstPad * pad, GstPadProbeInfo * info, gpointer user_data)
  GstEvent *event = GST_PAD_PROBE_INFO_EVENT(info);
  g_print ("Got event: %s\n", GST_EVENT_TYPE_NAME (event));

    if (GST_EVENT_TYPE (event) == GST_EVENT_SEGMENT) {
      gint64 duration = 0;

      gst_pad_peer_query_duration (pad, GST_FORMAT_TIME, &duration);

      gst_pad_add_probe (pad,
          buffer_probe, NULL, NULL);

  return GST_PAD_PROBE_OK;

leads to an infinite loop.  There's something wrong that happens to
internal probe cookie and do_probe_callbacks() in gstpad.c calls my
callback over and over again.  If I remove either
* buffer probe registration
* duration query
from the event callback above, all runs fine.

Any ideas?  Am I abusing probes?


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the gstreamer-devel mailing list