validate: expect a buffer with discontinuity after a seek

https://bugzilla.gnome.org/show_bug.cgi?id=744783
This commit is contained in:
Vincent Penquerc'h 2015-02-27 16:56:06 +00:00
parent c47cc7ba90
commit 87064b6994
3 changed files with 20 additions and 1 deletions

View file

@ -186,6 +186,8 @@ gst_validate_report_load_issues (void)
" all buffers coming into the decoders might be checked"
" and should have the exact expected metadatas and hash of the"
" content"));
REGISTER_VALIDATE_ISSUE (ISSUE, FIRST_BUFFER_NOT_DISCONT,
_("First buffer after a seek does not have the DISCONT flag set"), NULL);
REGISTER_VALIDATE_ISSUE (CRITICAL, WRONG_FLOW_RETURN,
_("flow return from pad push doesn't match expected value"),
_("flow return from a 1:1 sink/src pad element is as simple as "

View file

@ -63,6 +63,7 @@ typedef enum {
#define WRONG_FLOW_RETURN _QUARK("buffer::wrong-flow-return")
#define BUFFER_AFTER_EOS _QUARK("buffer::after-eos")
#define WRONG_BUFFER _QUARK("buffer::not-expected-one")
#define FIRST_BUFFER_NOT_DISCONT _QUARK("buffer::first-buffer-not-discont")
#define CAPS_IS_MISSING_FIELD _QUARK("caps::is-missing-field")
#define CAPS_FIELD_HAS_BAD_TYPE _QUARK("caps::field-has-bad-type")

View file

@ -436,6 +436,19 @@ gst_validate_action_get_clocktime (GstValidateScenario * scenario,
return TRUE;
}
static GstPadProbeReturn
_check_discont_buffer_done (GstPad * pad, GstPadProbeInfo * info,
GstValidateAction * action)
{
GstBuffer *buffer = GST_BUFFER (info->data);
if (!GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DISCONT)) {
GST_VALIDATE_REPORT (action->scenario, FIRST_BUFFER_NOT_DISCONT,
"First buffer after a seek does not have the DISCONT flag set");
}
gst_validate_action_set_done (action);
return GST_PAD_PROBE_REMOVE;
}
static GstPadProbeReturn
_check_new_segment_done (GstPad * pad, GstPadProbeInfo * info,
GstValidateAction * action)
@ -453,7 +466,10 @@ _check_new_segment_done (GstPad * pad, GstPadProbeInfo * info,
priv->seeked_in_pause = TRUE;
gst_event_replace (&priv->last_seek, NULL);
gst_validate_action_set_done (action);
gst_pad_add_probe (pad,
GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_BUFFER_LIST,
(GstPadProbeCallback) _check_discont_buffer_done, action, NULL);
return GST_PAD_PROBE_REMOVE;
}