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:
Thiago Santos 2013-07-30 09:56:05 -03:00
parent 55109ae7f9
commit 044084949a
3 changed files with 122 additions and 8 deletions

View file

@ -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);
}

View file

@ -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

View file

@ -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);
}