From 6677b5a57415ba49d2be89437b229d314a452ff7 Mon Sep 17 00:00:00 2001 From: Thiago Santos Date: Tue, 16 Jul 2013 23:19:13 -0300 Subject: [PATCH] pad-monitor: first buffer checks Check that a newsegment is received before the first buffer and that the first buffer running time is 0 --- validate/gst/qa/gst-qa-pad-monitor.c | 28 ++++++++++++++++++++++++++++ validate/gst/qa/gst-qa-pad-monitor.h | 2 ++ 2 files changed, 30 insertions(+) diff --git a/validate/gst/qa/gst-qa-pad-monitor.c b/validate/gst/qa/gst-qa-pad-monitor.c index d7fb81b2bb..6dc656c5ee 100644 --- a/validate/gst/qa/gst-qa-pad-monitor.c +++ b/validate/gst/qa/gst-qa-pad-monitor.c @@ -105,6 +105,7 @@ static void gst_qa_pad_monitor_init (GstQaPadMonitor * pad_monitor) { gst_segment_init (&pad_monitor->segment, GST_FORMAT_BYTES); + pad_monitor->first_buffer = TRUE; } /** @@ -126,6 +127,28 @@ gst_qa_pad_monitor_new (GstPad * pad, GstQaRunner * runner, 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) @@ -348,6 +371,9 @@ gst_qa_pad_monitor_chain_func (GstPad * pad, GstBuffer * buffer) 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; } @@ -410,6 +436,8 @@ gst_qa_pad_monitor_buffer_probe (GstPad * pad, GstBuffer * buffer, { 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))) { diff --git a/validate/gst/qa/gst-qa-pad-monitor.h b/validate/gst/qa/gst-qa-pad-monitor.h index 9f256ab670..114c9a4543 100644 --- a/validate/gst/qa/gst-qa-pad-monitor.h +++ b/validate/gst/qa/gst-qa-pad-monitor.h @@ -70,6 +70,8 @@ struct _GstQaPadMonitor { gulong event_probe_id; /*< private >*/ + gboolean first_buffer; + gboolean has_segment; GstSegment segment;