From 7de70978cfd473235d73ad778e82fc7f3406de0b Mon Sep 17 00:00:00 2001 From: Thiago Santos Date: Thu, 11 Jul 2013 13:41:25 -0300 Subject: [PATCH] gst-qa: add seek-tests option The seek-tests does a simple seeking after the pipeline has started so that seeking checks can be performed by the monitors --- validate/gst/qa/gst-qa.c | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/validate/gst/qa/gst-qa.c b/validate/gst/qa/gst-qa.c index 08b73cda17..71c79187cc 100644 --- a/validate/gst/qa/gst-qa.c +++ b/validate/gst/qa/gst-qa.c @@ -2,12 +2,22 @@ * Copyright (C) 2013 Thiago Santos */ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + #include #include #include #include +static gboolean seek_tests = FALSE; +static gboolean seek_done = FALSE; + +static GMainLoop *mainloop; +static GstElement *pipeline; + static gboolean bus_callback (GstBus * bus, GstMessage * message, gpointer data) { @@ -27,6 +37,24 @@ bus_callback (GstBus * bus, GstMessage * message, gpointer data) case GST_MESSAGE_EOS: g_main_loop_quit (loop); break; + case GST_MESSAGE_STATE_CHANGED: + { + GstState new_state; + if (GST_MESSAGE_SRC (message) == (GstObject *) pipeline) { + gst_message_parse_state_changed (message, NULL, &new_state, NULL); + if (new_state == GST_STATE_PLAYING) { + /* pipeline has started, issue seeking */ + /* TODO define where to seek to with arguments? */ + if (seek_tests && !seek_done) { + g_print ("Performing seek\n"); + seek_done = TRUE; + gst_element_seek_simple (pipeline, GST_FORMAT_TIME, + GST_SEEK_FLAG_FLUSH, 5 * GST_SECOND); + } + } + } + } + break; default: break; } @@ -39,13 +67,13 @@ main (int argc, gchar ** argv) { GError *err = NULL; GOptionEntry options[] = { + {"seek-test", '\0', 0, G_OPTION_ARG_NONE, &seek_tests, + "Perform the seeking use case", NULL}, {NULL} }; GOptionContext *ctx; - GMainLoop *mainloop; gchar **argvn; GstQaRunner *runner; - GstElement *pipeline; GstBus *bus; ctx = g_option_context_new ("- runs QA tests for a pipeline."); @@ -79,6 +107,7 @@ main (int argc, gchar ** argv) gst_bus_add_watch (bus, bus_callback, mainloop); gst_object_unref (bus); + g_print ("Starting pipeline\n"); if (gst_element_set_state (pipeline, GST_STATE_PLAYING) == GST_STATE_CHANGE_FAILURE) goto exit;