mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-21 13:36:39 +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;
|
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
|
void
|
||||||
gst_qa_override_event_handler (GstQaOverride * override, GstQaMonitor * monitor,
|
gst_qa_override_event_handler (GstQaOverride * override, GstQaMonitor * monitor,
|
||||||
GstEvent * event)
|
GstEvent * event)
|
||||||
|
@ -109,3 +130,27 @@ gst_qa_override_query_handler (GstQaOverride * override, GstQaMonitor * monitor,
|
||||||
if (override->query_handler)
|
if (override->query_handler)
|
||||||
override->query_handler (override, monitor, query);
|
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);
|
GstQaMonitor * pad_monitor, GstEvent * event);
|
||||||
typedef void (*GstQaOverrideQueryHandler)(GstQaOverride * override,
|
typedef void (*GstQaOverrideQueryHandler)(GstQaOverride * override,
|
||||||
GstQaMonitor * pad_monitor, GstQuery * query);
|
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 {
|
struct _QstQaOverride {
|
||||||
GHashTable *level_override;
|
GHashTable *level_override;
|
||||||
|
@ -45,6 +49,9 @@ struct _QstQaOverride {
|
||||||
GstQaOverrideBufferHandler buffer_handler;
|
GstQaOverrideBufferHandler buffer_handler;
|
||||||
GstQaOverrideEventHandler event_handler;
|
GstQaOverrideEventHandler event_handler;
|
||||||
GstQaOverrideQueryHandler query_handler;
|
GstQaOverrideQueryHandler query_handler;
|
||||||
|
GstQaOverrideBufferHandler buffer_probe_handler;
|
||||||
|
GstQaOverrideGetCapsHandler getcaps_handler;
|
||||||
|
GstQaOverrideSetCapsHandler setcaps_handler;
|
||||||
};
|
};
|
||||||
|
|
||||||
GstQaOverride * gst_qa_override_new (void);
|
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_event_handler (GstQaOverride * override, GstQaMonitor * monitor, GstEvent * event);
|
||||||
void gst_qa_override_buffer_handler (GstQaOverride * override, GstQaMonitor * monitor, GstBuffer * buffer);
|
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_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_event_handler (GstQaOverride * override, GstQaOverrideEventHandler handler);
|
||||||
void gst_qa_override_set_buffer_handler (GstQaOverride * override, GstQaOverrideBufferHandler 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_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
|
G_END_DECLS
|
||||||
|
|
||||||
|
|
|
@ -606,6 +606,23 @@ gst_qa_pad_monitor_buffer_overrides (GstQaPadMonitor * pad_monitor,
|
||||||
GST_QA_MONITOR_OVERRIDES_UNLOCK (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
|
static void
|
||||||
gst_qa_pad_monitor_query_overrides (GstQaPadMonitor * pad_monitor,
|
gst_qa_pad_monitor_query_overrides (GstQaPadMonitor * pad_monitor,
|
||||||
GstQuery * query)
|
GstQuery * query)
|
||||||
|
@ -623,6 +640,39 @@ gst_qa_pad_monitor_query_overrides (GstQaPadMonitor * pad_monitor,
|
||||||
GST_QA_MONITOR_OVERRIDES_UNLOCK (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
|
static gboolean
|
||||||
gst_qa_pad_monitor_timestamp_is_in_received_range (GstQaPadMonitor * monitor,
|
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;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
gst_qa_pad_monitor_event_overrides (pad_monitor, event);
|
|
||||||
|
|
||||||
if (handler) {
|
|
||||||
GST_QA_MONITOR_UNLOCK (pad_monitor);
|
GST_QA_MONITOR_UNLOCK (pad_monitor);
|
||||||
GST_QA_PAD_MONITOR_PARENT_UNLOCK (pad_monitor);
|
GST_QA_PAD_MONITOR_PARENT_UNLOCK (pad_monitor);
|
||||||
|
gst_qa_pad_monitor_event_overrides (pad_monitor, event);
|
||||||
|
if (handler) {
|
||||||
gst_event_ref (event);
|
gst_event_ref (event);
|
||||||
ret = pad_monitor->event_func (pad, event);
|
ret = pad_monitor->event_func (pad, event);
|
||||||
|
}
|
||||||
GST_QA_PAD_MONITOR_PARENT_LOCK (pad_monitor);
|
GST_QA_PAD_MONITOR_PARENT_LOCK (pad_monitor);
|
||||||
GST_QA_MONITOR_LOCK (pad_monitor);
|
GST_QA_MONITOR_LOCK (pad_monitor);
|
||||||
}
|
|
||||||
|
|
||||||
/* post checks */
|
/* post checks */
|
||||||
switch (GST_EVENT_TYPE (event)) {
|
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");
|
g_object_get_data ((GObject *) pad, "qa-monitor");
|
||||||
GstFlowReturn ret;
|
GstFlowReturn ret;
|
||||||
|
|
||||||
|
GST_QA_PAD_MONITOR_PARENT_LOCK (pad_monitor);
|
||||||
GST_QA_MONITOR_LOCK (pad_monitor);
|
GST_QA_MONITOR_LOCK (pad_monitor);
|
||||||
|
|
||||||
gst_qa_pad_monitor_check_first_buffer (pad_monitor, buffer);
|
gst_qa_pad_monitor_check_first_buffer (pad_monitor, buffer);
|
||||||
gst_qa_pad_monitor_update_buffer_data (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_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);
|
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");
|
g_object_get_data ((GObject *) pad, "qa-monitor");
|
||||||
gboolean ret;
|
gboolean ret;
|
||||||
|
|
||||||
GST_QA_MONITOR_LOCK (pad_monitor);
|
|
||||||
gst_qa_pad_monitor_query_overrides (pad_monitor, query);
|
gst_qa_pad_monitor_query_overrides (pad_monitor, query);
|
||||||
GST_QA_MONITOR_UNLOCK (pad_monitor);
|
|
||||||
|
|
||||||
ret = pad_monitor->query_func (pad, query);
|
ret = pad_monitor->query_func (pad, query);
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -1406,8 +1456,10 @@ gst_qa_pad_monitor_buffer_probe (GstPad * pad, GstBuffer * buffer,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_QA_MONITOR_UNLOCK (monitor);
|
GST_QA_MONITOR_UNLOCK (monitor);
|
||||||
GST_QA_PAD_MONITOR_PARENT_UNLOCK (monitor);
|
GST_QA_PAD_MONITOR_PARENT_UNLOCK (monitor);
|
||||||
|
gst_qa_pad_monitor_buffer_probe_overrides (monitor, buffer);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1481,6 +1533,8 @@ gst_qa_pad_monitor_getcaps_func (GstPad * pad)
|
||||||
GST_QA_MONITOR_UNLOCK (pad_monitor);
|
GST_QA_MONITOR_UNLOCK (pad_monitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gst_qa_pad_monitor_getcaps_overrides (pad_monitor, ret);
|
||||||
|
|
||||||
return 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_MONITOR_UNLOCK (pad_monitor);
|
||||||
GST_QA_PAD_MONITOR_PARENT_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) {
|
if (pad_monitor->setcaps_func) {
|
||||||
ret = pad_monitor->setcaps_func (pad, caps);
|
ret = pad_monitor->setcaps_func (pad, caps);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue