pad_monitor->expired_events = NULL;
gst_segment_init (&pad_monitor->segment, GST_FORMAT_BYTES);
pad_monitor->first_buffer = TRUE;
+ pad_monitor->pending_buffer_discont = TRUE;
pad_monitor->timestamp_range_start = GST_CLOCK_TIME_NONE;
pad_monitor->timestamp_range_end = GST_CLOCK_TIME_NONE;
}
static void
+gst_validate_pad_monitor_check_discont (GstValidatePadMonitor * pad_monitor,
+ GstBuffer * buffer)
+{
+ if (pad_monitor->pending_buffer_discont) {
+ if (!GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DISCONT))
+ GST_VALIDATE_REPORT (pad_monitor, BUFFER_MISSING_DISCONT,
+ "Buffer is missing a DISCONT flag");
+ pad_monitor->pending_buffer_discont = FALSE;
+ }
+}
+
+static void
gst_validate_pad_monitor_check_first_buffer (GstValidatePadMonitor *
pad_monitor, GstBuffer * buffer)
{
}
pad_monitor->pending_flush_stop = FALSE;
+ /* Buffers following a FLUSH should have the DISCONT flag set */
+ pad_monitor->pending_buffer_discont = TRUE;
+
/* cleanup our data */
gst_validate_pad_monitor_flush (pad_monitor);
}
}
pad_monitor->pending_eos_seqnum = seqnum;
+ /* Buffers following a SEGMENT should have the DISCONT flag set */
+ pad_monitor->pending_buffer_discont = TRUE;
if (GST_PAD_DIRECTION (pad) == GST_PAD_SINK) {
gst_validate_pad_monitor_add_expected_newsegment (pad_monitor, event);
GST_VALIDATE_PAD_MONITOR_PARENT_LOCK (pad_monitor);
GST_VALIDATE_MONITOR_LOCK (pad_monitor);
+ gst_validate_pad_monitor_check_discont (pad_monitor, buffer);
gst_validate_pad_monitor_check_right_buffer (pad_monitor, buffer);
gst_validate_pad_monitor_check_first_buffer (pad_monitor, buffer);
gst_validate_pad_monitor_update_buffer_data (pad_monitor, buffer);
GST_VALIDATE_PAD_MONITOR_PARENT_LOCK (monitor);
GST_VALIDATE_MONITOR_LOCK (monitor);
+ gst_validate_pad_monitor_check_discont (monitor, buffer);
gst_validate_pad_monitor_check_first_buffer (monitor, buffer);
gst_validate_pad_monitor_update_buffer_data (monitor, buffer);
gst_validate_pad_monitor_check_eos (monitor, buffer);
_("GST_FLOW_ERROR returned without posting an ERROR on the bus"),
_("Element MUST post a GST_MESSAGE_ERROR with GST_ELEMENT_ERROR before"
" returning GST_FLOW_ERROR"));
+ REGISTER_VALIDATE_ISSUE (WARNING, BUFFER_MISSING_DISCONT,
+ _("Buffer didn't have expected DISCONT flag"),
+ _("Buffers after SEGMENT and FLUSH must have a DISCONT flag"));
REGISTER_VALIDATE_ISSUE (ISSUE, CAPS_IS_MISSING_FIELD,
_("caps is missing a required field for its type"),