mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-17 19:55:32 +00:00
qa-override: add more pad overrides for buffer probe and caps
Add override functions for custom checking of buffer probe and getcaps/setcaps functions.
This commit is contained in:
parent
55109ae7f9
commit
044084949a
3 changed files with 122 additions and 8 deletions
|
@ -86,6 +86,27 @@ gst_qa_override_set_query_handler (GstQaOverride * override,
|
|||
override->query_handler = handler;
|
||||
}
|
||||
|
||||
void
|
||||
gst_qa_override_set_buffer_probe_handler (GstQaOverride * override,
|
||||
GstQaOverrideBufferHandler handler)
|
||||
{
|
||||
override->buffer_probe_handler = handler;
|
||||
}
|
||||
|
||||
void
|
||||
gst_qa_override_set_getcaps_handler (GstQaOverride * override,
|
||||
GstQaOverrideGetCapsHandler handler)
|
||||
{
|
||||
override->getcaps_handler = handler;
|
||||
}
|
||||
|
||||
void
|
||||
gst_qa_override_set_setcaps_handler (GstQaOverride * override,
|
||||
GstQaOverrideSetCapsHandler handler)
|
||||
{
|
||||
override->setcaps_handler = handler;
|
||||
}
|
||||
|
||||
void
|
||||
gst_qa_override_event_handler (GstQaOverride * override, GstQaMonitor * monitor,
|
||||
GstEvent * event)
|
||||
|
@ -109,3 +130,27 @@ gst_qa_override_query_handler (GstQaOverride * override, GstQaMonitor * monitor,
|
|||
if (override->query_handler)
|
||||
override->query_handler (override, monitor, query);
|
||||
}
|
||||
|
||||
void
|
||||
gst_qa_override_buffer_probe_handler (GstQaOverride * override,
|
||||
GstQaMonitor * monitor, GstBuffer * buffer)
|
||||
{
|
||||
if (override->buffer_probe_handler)
|
||||
override->buffer_probe_handler (override, monitor, buffer);
|
||||
}
|
||||
|
||||
void
|
||||
gst_qa_override_getcaps_handler (GstQaOverride * override,
|
||||
GstQaMonitor * monitor, GstCaps * caps)
|
||||
{
|
||||
if (override->getcaps_handler)
|
||||
override->getcaps_handler (override, monitor, caps);
|
||||
}
|
||||
|
||||
void
|
||||
gst_qa_override_setcaps_handler (GstQaOverride * override,
|
||||
GstQaMonitor * monitor, GstCaps * caps)
|
||||
{
|
||||
if (override->setcaps_handler)
|
||||
override->setcaps_handler (override, monitor, caps);
|
||||
}
|
||||
|
|
|
@ -37,6 +37,10 @@ typedef void (*GstQaOverrideEventHandler)(GstQaOverride * override,
|
|||
GstQaMonitor * pad_monitor, GstEvent * event);
|
||||
typedef void (*GstQaOverrideQueryHandler)(GstQaOverride * override,
|
||||
GstQaMonitor * pad_monitor, GstQuery * query);
|
||||
typedef void (*GstQaOverrideGetCapsHandler)(GstQaOverride * override,
|
||||
GstQaMonitor * pad_monitor, GstCaps * caps);
|
||||
typedef void (*GstQaOverrideSetCapsHandler)(GstQaOverride * override,
|
||||
GstQaMonitor * pad_monitor, GstCaps * caps);
|
||||
|
||||
struct _QstQaOverride {
|
||||
GHashTable *level_override;
|
||||
|
@ -45,6 +49,9 @@ struct _QstQaOverride {
|
|||
GstQaOverrideBufferHandler buffer_handler;
|
||||
GstQaOverrideEventHandler event_handler;
|
||||
GstQaOverrideQueryHandler query_handler;
|
||||
GstQaOverrideBufferHandler buffer_probe_handler;
|
||||
GstQaOverrideGetCapsHandler getcaps_handler;
|
||||
GstQaOverrideSetCapsHandler setcaps_handler;
|
||||
};
|
||||
|
||||
GstQaOverride * gst_qa_override_new (void);
|
||||
|
@ -55,10 +62,16 @@ GstQaReportLevel gst_qa_override_get_severity (GstQaOverride * override, GstQa
|
|||
void gst_qa_override_event_handler (GstQaOverride * override, GstQaMonitor * monitor, GstEvent * event);
|
||||
void gst_qa_override_buffer_handler (GstQaOverride * override, GstQaMonitor * monitor, GstBuffer * buffer);
|
||||
void gst_qa_override_query_handler (GstQaOverride * override, GstQaMonitor * monitor, GstQuery * query);
|
||||
void gst_qa_override_buffer_probe_handler (GstQaOverride * override, GstQaMonitor * monitor, GstBuffer * buffer);
|
||||
void gst_qa_override_getcaps_handler (GstQaOverride * override, GstQaMonitor * monitor, GstCaps * caps);
|
||||
void gst_qa_override_setcaps_handler (GstQaOverride * override, GstQaMonitor * monitor, GstCaps * caps);
|
||||
|
||||
void gst_qa_override_set_event_handler (GstQaOverride * override, GstQaOverrideEventHandler handler);
|
||||
void gst_qa_override_set_buffer_handler (GstQaOverride * override, GstQaOverrideBufferHandler handler);
|
||||
void gst_qa_override_set_query_handler (GstQaOverride * override, GstQaOverrideQueryHandler handler);
|
||||
void gst_qa_override_set_buffer_probe_handler (GstQaOverride * override, GstQaOverrideBufferHandler handler);
|
||||
void gst_qa_override_set_getcaps_handler (GstQaOverride * override, GstQaOverrideGetCapsHandler handler);
|
||||
void gst_qa_override_set_setcaps_handler (GstQaOverride * override, GstQaOverrideSetCapsHandler handler);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
|
|
|
@ -606,6 +606,23 @@ gst_qa_pad_monitor_buffer_overrides (GstQaPadMonitor * pad_monitor,
|
|||
GST_QA_MONITOR_OVERRIDES_UNLOCK (pad_monitor);
|
||||
}
|
||||
|
||||
static void
|
||||
gst_qa_pad_monitor_buffer_probe_overrides (GstQaPadMonitor * pad_monitor,
|
||||
GstBuffer * buffer)
|
||||
{
|
||||
GList *iter;
|
||||
|
||||
GST_QA_MONITOR_OVERRIDES_LOCK (pad_monitor);
|
||||
for (iter = GST_QA_MONITOR_OVERRIDES (pad_monitor).head; iter;
|
||||
iter = g_list_next (iter)) {
|
||||
GstQaOverride *override = iter->data;
|
||||
|
||||
gst_qa_override_buffer_probe_handler (override,
|
||||
GST_QA_MONITOR_CAST (pad_monitor), buffer);
|
||||
}
|
||||
GST_QA_MONITOR_OVERRIDES_UNLOCK (pad_monitor);
|
||||
}
|
||||
|
||||
static void
|
||||
gst_qa_pad_monitor_query_overrides (GstQaPadMonitor * pad_monitor,
|
||||
GstQuery * query)
|
||||
|
@ -623,6 +640,39 @@ gst_qa_pad_monitor_query_overrides (GstQaPadMonitor * pad_monitor,
|
|||
GST_QA_MONITOR_OVERRIDES_UNLOCK (pad_monitor);
|
||||
}
|
||||
|
||||
static void
|
||||
gst_qa_pad_monitor_getcaps_overrides (GstQaPadMonitor * pad_monitor,
|
||||
GstCaps * caps)
|
||||
{
|
||||
GList *iter;
|
||||
|
||||
GST_QA_MONITOR_OVERRIDES_LOCK (pad_monitor);
|
||||
for (iter = GST_QA_MONITOR_OVERRIDES (pad_monitor).head; iter;
|
||||
iter = g_list_next (iter)) {
|
||||
GstQaOverride *override = iter->data;
|
||||
|
||||
gst_qa_override_getcaps_handler (override,
|
||||
GST_QA_MONITOR_CAST (pad_monitor), caps);
|
||||
}
|
||||
GST_QA_MONITOR_OVERRIDES_UNLOCK (pad_monitor);
|
||||
}
|
||||
|
||||
static void
|
||||
gst_qa_pad_monitor_setcaps_overrides (GstQaPadMonitor * pad_monitor,
|
||||
GstCaps * caps)
|
||||
{
|
||||
GList *iter;
|
||||
|
||||
GST_QA_MONITOR_OVERRIDES_LOCK (pad_monitor);
|
||||
for (iter = GST_QA_MONITOR_OVERRIDES (pad_monitor).head; iter;
|
||||
iter = g_list_next (iter)) {
|
||||
GstQaOverride *override = iter->data;
|
||||
|
||||
gst_qa_override_setcaps_handler (override,
|
||||
GST_QA_MONITOR_CAST (pad_monitor), caps);
|
||||
}
|
||||
GST_QA_MONITOR_OVERRIDES_UNLOCK (pad_monitor);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_qa_pad_monitor_timestamp_is_in_received_range (GstQaPadMonitor * monitor,
|
||||
|
@ -1150,16 +1200,15 @@ gst_qa_pad_monitor_sink_event_check (GstQaPadMonitor * pad_monitor,
|
|||
break;
|
||||
}
|
||||
|
||||
GST_QA_MONITOR_UNLOCK (pad_monitor);
|
||||
GST_QA_PAD_MONITOR_PARENT_UNLOCK (pad_monitor);
|
||||
gst_qa_pad_monitor_event_overrides (pad_monitor, event);
|
||||
|
||||
if (handler) {
|
||||
GST_QA_MONITOR_UNLOCK (pad_monitor);
|
||||
GST_QA_PAD_MONITOR_PARENT_UNLOCK (pad_monitor);
|
||||
gst_event_ref (event);
|
||||
ret = pad_monitor->event_func (pad, event);
|
||||
GST_QA_PAD_MONITOR_PARENT_LOCK (pad_monitor);
|
||||
GST_QA_MONITOR_LOCK (pad_monitor);
|
||||
}
|
||||
GST_QA_PAD_MONITOR_PARENT_LOCK (pad_monitor);
|
||||
GST_QA_MONITOR_LOCK (pad_monitor);
|
||||
|
||||
/* post checks */
|
||||
switch (GST_EVENT_TYPE (event)) {
|
||||
|
@ -1263,13 +1312,16 @@ gst_qa_pad_monitor_chain_func (GstPad * pad, GstBuffer * buffer)
|
|||
g_object_get_data ((GObject *) pad, "qa-monitor");
|
||||
GstFlowReturn ret;
|
||||
|
||||
GST_QA_PAD_MONITOR_PARENT_LOCK (pad_monitor);
|
||||
GST_QA_MONITOR_LOCK (pad_monitor);
|
||||
|
||||
gst_qa_pad_monitor_check_first_buffer (pad_monitor, buffer);
|
||||
gst_qa_pad_monitor_update_buffer_data (pad_monitor, buffer);
|
||||
|
||||
gst_qa_pad_monitor_buffer_overrides (pad_monitor, buffer);
|
||||
GST_QA_MONITOR_UNLOCK (pad_monitor);
|
||||
GST_QA_PAD_MONITOR_PARENT_UNLOCK (pad_monitor);
|
||||
|
||||
gst_qa_pad_monitor_buffer_overrides (pad_monitor, buffer);
|
||||
|
||||
ret = pad_monitor->chain_func (pad, buffer);
|
||||
|
||||
|
@ -1338,9 +1390,7 @@ gst_qa_pad_monitor_query_func (GstPad * pad, GstQuery * query)
|
|||
g_object_get_data ((GObject *) pad, "qa-monitor");
|
||||
gboolean ret;
|
||||
|
||||
GST_QA_MONITOR_LOCK (pad_monitor);
|
||||
gst_qa_pad_monitor_query_overrides (pad_monitor, query);
|
||||
GST_QA_MONITOR_UNLOCK (pad_monitor);
|
||||
|
||||
ret = pad_monitor->query_func (pad, query);
|
||||
return ret;
|
||||
|
@ -1406,8 +1456,10 @@ gst_qa_pad_monitor_buffer_probe (GstPad * pad, GstBuffer * buffer,
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
GST_QA_MONITOR_UNLOCK (monitor);
|
||||
GST_QA_PAD_MONITOR_PARENT_UNLOCK (monitor);
|
||||
gst_qa_pad_monitor_buffer_probe_overrides (monitor, buffer);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -1481,6 +1533,8 @@ gst_qa_pad_monitor_getcaps_func (GstPad * pad)
|
|||
GST_QA_MONITOR_UNLOCK (pad_monitor);
|
||||
}
|
||||
|
||||
gst_qa_pad_monitor_getcaps_overrides (pad_monitor, ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -1550,6 +1604,8 @@ gst_qa_pad_monitor_setcaps_func (GstPad * pad, GstCaps * caps)
|
|||
GST_QA_MONITOR_UNLOCK (pad_monitor);
|
||||
GST_QA_PAD_MONITOR_PARENT_UNLOCK (pad_monitor);
|
||||
|
||||
gst_qa_pad_monitor_setcaps_overrides (pad_monitor, caps);
|
||||
|
||||
if (pad_monitor->setcaps_func) {
|
||||
ret = pad_monitor->setcaps_func (pad, caps);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue