gst_qa_pad_monitor_init (GstQaPadMonitor * pad_monitor)
{
gst_segment_init (&pad_monitor->segment, GST_FORMAT_BYTES);
+ pad_monitor->first_buffer = TRUE;
}
/**
return monitor;
}
+static void
+gst_qa_pad_monitor_check_first_buffer (GstQaPadMonitor * pad_monitor,
+ GstBuffer * buffer)
+{
+ if (G_UNLIKELY (pad_monitor->first_buffer)) {
+ pad_monitor->first_buffer = FALSE;
+
+ if (!pad_monitor->has_segment) {
+ GST_QA_MONITOR_REPORT_WARNING (pad_monitor, EVENT, EXPECTED,
+ "Received buffer before Segment event");
+ }
+ if (GST_CLOCK_TIME_IS_VALID (GST_BUFFER_TIMESTAMP (buffer))) {
+ gint64 running_time = gst_segment_to_running_time (&pad_monitor->segment,
+ pad_monitor->segment.format, GST_BUFFER_TIMESTAMP (buffer));
+ if (running_time != 0) {
+ GST_QA_MONITOR_REPORT_WARNING (pad_monitor, BUFFER, TIMESTAMP,
+ "First buffer running time is not 0");
+ }
+ }
+ }
+}
+
static gboolean
gst_qa_pad_monitor_sink_event_check (GstQaPadMonitor * pad_monitor,
GstEvent * event, GstPadEventFunction handler)
GstQaPadMonitor *pad_monitor =
g_object_get_data ((GObject *) pad, "qa-monitor");
GstFlowReturn ret;
+
+ gst_qa_pad_monitor_check_first_buffer (pad_monitor, buffer);
+
ret = pad_monitor->chain_func (pad, buffer);
return ret;
}
{
GstQaPadMonitor *monitor = udata;
+ gst_qa_pad_monitor_check_first_buffer (monitor, buffer);
+
/* TODO should we assume that a pad-monitor should always have an
* element-monitor as a parent? */
if (G_LIKELY (GST_QA_MONITOR_GET_PARENT (monitor))) {