static GstPadProbeReturn process_buffer_probe_cb (GstPad * pad, GstPadProbeInfo * info, gpointer user_data) { if (GST_PAD_PROBE_INFO_TYPE (info) & GST_PAD_PROBE_TYPE_BUFFER) { GstBuffer *buffer = GST_PAD_PROBE_INFO_BUFFER (info); process_buffer (buffer, user_data); } else if (GST_PAD_PROBE_INFO_TYPE (info) & GST_PAD_PROBE_TYPE_BUFFER_LIST) { GstBufferList *list = GST_PAD_PROBE_INFO_BUFFER_LIST (info); gst_buffer_list_foreach (list, process_buffer_list_cb, user_data); } return GST_PAD_PROBE_OK; }
static GstPadProbeReturn kms_av_muxer_injector_probe (GstPad * pad, GstPadProbeInfo * info, gpointer self) { GstElement *elem; GstPadProbeReturn ret = GST_PAD_PROBE_OK; if (info->type & GST_PAD_PROBE_TYPE_BLOCK) { return GST_PAD_PROBE_PASS; } elem = gst_pad_get_parent_element (pad); g_return_val_if_fail (elem != NULL, GST_PAD_PROBE_OK); if (info->type & GST_PAD_PROBE_TYPE_BUFFER_LIST) { GstBufferList *list = GST_PAD_PROBE_INFO_BUFFER_LIST (info); BufferListItData itData; itData.self = self; itData.elem = elem; if (G_UNLIKELY (!gst_buffer_list_foreach (list, kms_av_muxer_injector_probe_it, &itData))) { ret = GST_PAD_PROBE_DROP; } } else if (info->type & GST_PAD_PROBE_TYPE_BUFFER) { GstBuffer **buffer = (GstBuffer **) & info->data; if (G_UNLIKELY (!kms_av_muxer_injector (self, elem, buffer))) { ret = GST_PAD_PROBE_DROP; } } g_object_unref (elem); return ret; }