4#include <common/qgstreamerbufferprobe_p.h>
6#include <common/qgst_p.h>
10QGstreamerBufferProbe::QGstreamerBufferProbe(Flags flags)
15QGstreamerBufferProbe::~QGstreamerBufferProbe() =
default;
17void QGstreamerBufferProbe::addProbeToPad(GstPad *pad,
bool downstream)
20 gst_pad_get_current_caps(pad),
25 probeCaps(caps.caps());
27 if (m_flags & ProbeCaps) {
28 m_capsProbeId = gst_pad_add_probe(
31 ? GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM
32 : GST_PAD_PROBE_TYPE_EVENT_UPSTREAM,
37 if (m_flags & ProbeBuffers) {
38 m_bufferProbeId = gst_pad_add_probe(
39 pad, GST_PAD_PROBE_TYPE_BUFFER, bufferProbe,
this,
nullptr);
43void QGstreamerBufferProbe::removeProbeFromPad(GstPad *pad)
45 if (m_capsProbeId != -1) {
46 gst_pad_remove_probe(pad, m_capsProbeId);
49 if (m_bufferProbeId != -1) {
50 gst_pad_remove_probe(pad, m_bufferProbeId);
55void QGstreamerBufferProbe::probeCaps(GstCaps *)
59bool QGstreamerBufferProbe::probeBuffer(GstBuffer *)
64GstPadProbeReturn QGstreamerBufferProbe::capsProbe(GstPad *, GstPadProbeInfo *info, gpointer user_data)
66 QGstreamerBufferProbe *
const control =
static_cast<QGstreamerBufferProbe *>(user_data);
68 if (GstEvent *
const event = gst_pad_probe_info_get_event(info)) {
69 if (GST_EVENT_TYPE(event) == GST_EVENT_CAPS) {
71 gst_event_parse_caps(event, &caps);
73 control->probeCaps(caps);
76 return GST_PAD_PROBE_OK;
79GstPadProbeReturn QGstreamerBufferProbe::bufferProbe(
80 GstPad *, GstPadProbeInfo *info, gpointer user_data)
82 QGstreamerBufferProbe *
const control =
static_cast<QGstreamerBufferProbe *>(user_data);
83 if (GstBuffer *
const buffer = gst_pad_probe_info_get_buffer(info))
84 return control->probeBuffer(buffer) ? GST_PAD_PROBE_OK : GST_PAD_PROBE_DROP;
85 return GST_PAD_PROBE_OK;