pad_monitor->pending_newsegment_seqnum = 0;
} else {
GST_VALIDATE_REPORT (pad_monitor, EVENT_HAS_WRONG_SEQNUM,
- "The expected EOS seqnum should be the same as the "
+ "The expected segment seqnum should be the same as the "
"one from the seek that caused it. Got: %u."
" Expected: %u", seqnum, pad_monitor->pending_eos_seqnum);
}
}
case GST_EVENT_EOS:
pad_monitor->is_eos = TRUE;
- if (pad_monitor->pending_eos_seqnum != seqnum) {
+ if (pad_monitor->pending_eos_seqnum == 0) {
+ GST_VALIDATE_REPORT (pad_monitor, EVENT_EOS_WITHOUT_SEGMENT,
+ "EOS %" GST_PTR_FORMAT " received before a segment was received",
+ event);
+ } else if (pad_monitor->pending_eos_seqnum != seqnum) {
GST_VALIDATE_REPORT (pad_monitor, EVENT_HAS_WRONG_SEQNUM,
"The expected EOS seqnum should be the same as the "
"one from the seek that caused it. Got: %u."
GST_END_TEST;
+GST_START_TEST (eos_without_segment)
+{
+ GstPad *srcpad, *sinkpad;
+ GstValidateReport *report;
+ GstElement *decoder = fake_decoder_new ();
+ GstElement *sink = gst_element_factory_make ("fakesink", NULL);
+ GstBin *pipeline = GST_BIN (gst_pipeline_new ("validate-pipeline"));
+ GList *reports;
+ GstValidateRunner *runner;
+ GstValidateMonitor *monitor;
+
+ fail_unless (g_setenv ("GST_VALIDATE_REPORT_LEVEL", "all", TRUE));
+ runner = gst_validate_runner_new ();
+ monitor =
+ gst_validate_monitor_factory_create (GST_OBJECT (pipeline),
+ runner, NULL);
+
+ gst_bin_add_many (pipeline, decoder, sink, NULL);
+ srcpad = gst_pad_new ("srcpad1", GST_PAD_SRC);
+ sinkpad = decoder->sinkpads->data;
+ gst_pad_link (srcpad, sinkpad);
+
+ gst_element_link (decoder, sink);
+ fail_unless_equals_int (gst_element_set_state (GST_ELEMENT (pipeline),
+ GST_STATE_PLAYING), GST_STATE_CHANGE_ASYNC);
+ fail_unless (gst_pad_activate_mode (srcpad, GST_PAD_MODE_PUSH, TRUE));
+
+ reports = gst_validate_runner_get_reports (runner);
+ assert_equals_int (g_list_length (reports), 0);
+ g_list_free_full (reports, (GDestroyNotify) gst_validate_report_unref);
+
+ fail_unless (gst_pad_push_event (srcpad, gst_event_new_eos ()));
+ reports = gst_validate_runner_get_reports (runner);
+
+ /* Getting the issue on the srcpad -> decoder.sinkpad -> decoder->srcpad */
+ assert_equals_int (g_list_length (reports), 3);
+ report = reports->data;
+ fail_unless_equals_int (report->level, GST_VALIDATE_REPORT_LEVEL_WARNING);
+ fail_unless_equals_int (report->issue->issue_id, EVENT_EOS_WITHOUT_SEGMENT);
+ clean_bus (GST_ELEMENT (pipeline));
+
+ g_list_free_full (reports, (GDestroyNotify) gst_validate_report_unref);
+
+ gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_NULL);
+ check_destroyed (pipeline, NULL, NULL);
+ check_destroyed (monitor, NULL, NULL);
+ check_destroyed (runner, NULL, NULL);
+}
+
+GST_END_TEST;
+
static Suite *
gst_validate_suite (void)
{
tcase_add_test (tc_chain, flow_aggregation);
tcase_add_test (tc_chain, issue_concatenation);
tcase_add_test (tc_chain, check_media_info);
+ tcase_add_test (tc_chain, eos_without_segment);
return s;
}