diff --git a/tests/check/Makefile.am b/tests/check/Makefile.am index 9d5061b984..d4e0536562 100644 --- a/tests/check/Makefile.am +++ b/tests/check/Makefile.am @@ -30,6 +30,24 @@ STATE_IGNORE_ELEMENTS = cdio cdparanoiasrc libvisual_ alsasrc alsasink TESTS = $(check_PROGRAMS) +if USE_GL +check_gl=\ + libs/gstglcontext \ + libs/gstglmemory \ + libs/gstglupload \ + libs/gstglcolorconvert \ + libs/gstglmatrix \ + libs/gstglquery \ + libs/gstglsl \ + libs/gstglslstage \ + libs/gstglshader \ + libs/gstglheaders \ + elements/glimagesink \ + pipelines/gl-launch-lines +else +check_gl= +endif + if USE_LIBVISUAL check_libvisual = elements/libvisual else @@ -239,6 +257,7 @@ check_PROGRAMS = \ $(check_audiotestsrc) \ $(check_encodebin) \ $(check_gio) \ + $(check_gl) \ $(check_ogg) \ $(check_opus) \ $(check_pango) \ @@ -386,6 +405,102 @@ libs_fft_LDADD = \ $(GST_BASE_LIBS) \ $(LDADD) +libs_gstglcontext_LDADD = \ + $(top_builddir)/gst-libs/gst/gl/libgstgl-@GST_API_VERSION@.la \ + $(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_API_VERSION@.la \ + $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD) + +libs_gstglcontext_CFLAGS = \ + $(GST_PLUGINS_BASE_CFLAGS) \ + $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(GL_CFLAGS) $(AM_CFLAGS) + +libs_gstglmemory_LDADD = \ + $(top_builddir)/gst-libs/gst/gl/libgstgl-@GST_API_VERSION@.la \ + $(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_API_VERSION@.la \ + $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD) + +libs_gstglmemory_CFLAGS = \ + $(GST_PLUGINS_BASE_CFLAGS) \ + $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(GL_CFLAGS) $(AM_CFLAGS) + +libs_gstglupload_CFLAGS = \ + $(GST_PLUGINS_BASE_CFLAGS) \ + $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(GL_CFLAGS) $(AM_CFLAGS) + +libs_gstglupload_LDADD = \ + $(top_builddir)/gst-libs/gst/gl/libgstgl-@GST_API_VERSION@.la \ + $(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_API_VERSION@.la \ + $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD) + +libs_gstglcolorconvert_CFLAGS = \ + $(GST_PLUGINS_BASE_CFLAGS) \ + $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(GL_CFLAGS) $(AM_CFLAGS) + +libs_gstglcolorconvert_LDADD = \ + $(top_builddir)/gst-libs/gst/gl/libgstgl-@GST_API_VERSION@.la \ + $(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_API_VERSION@.la \ + $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD) + +libs_gstglmatrix_CFLAGS = \ + $(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) \ + -DGST_USE_UNSTABLE_API \ + $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS) + +libs_gstglmatrix_LDADD = \ + $(top_builddir)/gst-libs/gst/gl/libgstgl-@GST_API_VERSION@.la \ + $(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_API_VERSION@.la \ + $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD) + +libs_gstglquery_LDADD = \ + $(top_builddir)/gst-libs/gst/gl/libgstgl-@GST_API_VERSION@.la \ + $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD) + +libs_gstglquery_CFLAGS = \ + $(GST_PLUGINS_BASE_CFLAGS) \ + $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(GL_CFLAGS) $(AM_CFLAGS) + +libs_gstglsl_LDADD = \ + $(top_builddir)/gst-libs/gst/gl/libgstgl-@GST_API_VERSION@.la \ + $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD) + +libs_gstglsl_CFLAGS = \ + $(GST_PLUGINS_BASE_CFLAGS) \ + $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(GL_CFLAGS) $(AM_CFLAGS) + +libs_gstglslstage_LDADD = \ + $(top_builddir)/gst-libs/gst/gl/libgstgl-@GST_API_VERSION@.la \ + $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD) + +libs_gstglslstage_CFLAGS = \ + $(GST_PLUGINS_BASE_CFLAGS) \ + $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(GL_CFLAGS) $(AM_CFLAGS) + +libs_gstglshader_LDADD = \ + $(top_builddir)/gst-libs/gst/gl/libgstgl-@GST_API_VERSION@.la \ + $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD) + +libs_gstglshader_CFLAGS = \ + $(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) \ + -DGST_USE_UNSTABLE_API \ + $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(GL_CFLAGS) $(AM_CFLAGS) + +libs_gstglheaders_LDADD = \ + $(top_builddir)/gst-libs/gst/gl/libgstgl-@GST_API_VERSION@.la \ + $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD) + +libs_gstglheaders_CFLAGS = \ + $(GST_PLUGINS_BASE_CFLAGS) \ + $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(GL_CFLAGS) $(AM_CFLAGS) + +elements_glimagesink_CFLAGS = \ + $(GST_PLUGINS_BASE_CFLAGS) \ + $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(GL_CFLAGS) $(AM_CFLAGS) + +elements_glimagesink_LDADD = \ + $(top_builddir)/gst-libs/gst/gl/libgstgl-@GST_API_VERSION@.la \ + $(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_API_VERSION@.la \ + $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD) + libs_navigation_CFLAGS = \ $(GST_PLUGINS_BASE_CFLAGS) \ $(GST_BASE_CFLAGS) \ @@ -623,6 +738,8 @@ elements_videoscale_6_SOURCES = elements/videoscale.c elements_videoscale_6_CFLAGS = $(elements_videoscale_CFLAGS) -DVSCALE_TEST_GROUP=6 elements_videoscale_6_LDADD = $(elements_videoscale_LDADD) +generic_states_LDADD = $(GLIB_LIBS) $(LDADD) + gst_typefindfunctions_CFLAGS = $(GST_BASE_CFLAGS) $(AM_CFLAGS) gst_typefindfunctions_LDADD = $(GST_BASE_LIBS) $(LDADD) @@ -680,6 +797,13 @@ pipelines_tcp_LDADD = $(top_builddir)/gst-libs/gst/app/libgstapp-@GST_API_VERSI pipelines_gio_CFLAGS = $(GIO_CFLAGS) $(AM_CFLAGS) pipelines_gio_LDADD = $(GIO_LIBS) $(LDADD) +pipelines_gl_launch_lines_CFLAGS = \ + $(GST_PLUGINS_BASE_CFLAGS) \ + $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS) + +pipelines_gl_launch_lines_LDADD = \ + $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD) + pipelines_vorbisenc_CFLAGS = \ $(GST_PLUGINS_BASE_CFLAGS) \ $(AM_CFLAGS) diff --git a/tests/check/elements/.gitignore b/tests/check/elements/.gitignore index 4b49d8363c..28194b050b 100644 --- a/tests/check/elements/.gitignore +++ b/tests/check/elements/.gitignore @@ -9,6 +9,7 @@ audioresample audiotestsrc decodebin encodebin +glimagesink libvisual multifdsink multisocketsink diff --git a/tests/check/generic/states.c b/tests/check/generic/states.c index bb6357947f..64b2b40e51 100644 --- a/tests/check/generic/states.c +++ b/tests/check/generic/states.c @@ -25,6 +25,7 @@ #endif #include +#include #include @@ -209,6 +210,17 @@ states_suite (void) { Suite *s = suite_create ("states_base"); TCase *tc_chain = tcase_create ("general"); + GModule *libx11; + + libx11 = + g_module_open ("libX11.so.6", G_MODULE_BIND_LOCAL | G_MODULE_BIND_LAZY); + if (libx11) { + void (*xinitthreads) (void); + if (g_module_symbol (libx11, "XInitThreads", (gpointer *) & xinitthreads)) { + xinitthreads (); + } + g_module_close (libx11); + } suite_add_tcase (s, tc_chain); tcase_add_checked_fixture (tc_chain, setup, teardown); diff --git a/tests/check/libs/.gitignore b/tests/check/libs/.gitignore index f38e1c1d6e..a9134ce641 100644 --- a/tests/check/libs/.gitignore +++ b/tests/check/libs/.gitignore @@ -7,6 +7,16 @@ audioencoder baseaudiovisualizer discoverer fft +gstglcolorconvert +gstglcontext +gstglheaders +gstglmatrix +gstglmemory +gstglquery +gstglshader +gstglsl +gstglslstage +gstglupload gstlibscpp libsabi mikey diff --git a/tests/check/libs/gstglheaders.c b/tests/check/libs/gstglheaders.c index 5c359368c1..1e4470d173 100644 --- a/tests/check/libs/gstglheaders.c +++ b/tests/check/libs/gstglheaders.c @@ -64,7 +64,7 @@ #include #endif -#if GST_GL_HAVE_PLATFORM_X11 +#ifdef GST_GL_HAVE_PLATFORM_GLX #include #include #endif diff --git a/tests/check/meson.build b/tests/check/meson.build index 4330f643e8..492e63cd97 100644 --- a/tests/check/meson.build +++ b/tests/check/meson.build @@ -24,6 +24,16 @@ base_tests = [ [ 'libs/sdp.c' ], [ 'libs/tag.c' ], # [ 'libs/video' ], # FIXME: times out, perhaps split or spawn conversions into benchmark tool and/or multiple threads + [ 'libs/gstglcolorconvert.c', not build_gstgl, [gstgl_dep]], + [ 'libs/gstglcontext.c', not build_gstgl, [gstgl_dep]], + [ 'libs/gstglheaders.c', not build_gstgl, [gstgl_dep]], + [ 'libs/gstglmatrix.c', not build_gstgl, [gstgl_dep]], + [ 'libs/gstglmemory.c', not build_gstgl, [gstgl_dep]], + [ 'libs/gstglquery.c', not build_gstgl, [gstgl_dep]], + [ 'libs/gstglshader.c', not build_gstgl, [gstgl_dep]], + [ 'libs/gstglsl.c', not build_gstgl, [gstgl_dep]], + [ 'libs/gstglslstage.c', not build_gstgl, [gstgl_dep]], + [ 'libs/gstglupload.c', not build_gstgl, [gstgl_dep]], [ 'libs/videoencoder.c' ], [ 'libs/videotimecode.c' ], [ 'libs/xmpwriter.c' ], @@ -37,6 +47,7 @@ base_tests = [ [ 'elements/libvisual.c', not libvisual_dep.found() ], [ 'elements/decodebin.c' ], [ 'elements/encodebin.c', not theoraenc_dep.found() or not vorbisenc_dep.found() ], + [ 'elements/glimagesink.c', not build_gstgl, [gstgl_dep]], [ 'elements/multifdsink.c' ], [ 'elements/multisocketsink.c' ], [ 'elements/playbin.c' ], @@ -53,7 +64,8 @@ base_tests = [ [ 'elements/vorbisdec.c', not vorbis_dep.found(), [ vorbis_dep, vorbisenc_dep ] ], [ 'elements/vorbistag.c', not vorbisenc_dep.found(), [ vorbis_dep, vorbisenc_dep ] ], [ 'generic/clock-selection.c' ], - [ 'generic/states.c' ], + [ 'generic/states.c', false, [ gmodule_dep ] ], + [ 'pipelines/gl-launch-lines.c', not build_gstgl ], [ 'pipelines/simple-launch-lines.c' ], [ 'pipelines/basetime.c' ], [ 'pipelines/capsfilter-renegotiation.c' ], diff --git a/tests/check/pipelines/.gitignore b/tests/check/pipelines/.gitignore index 3933d360c0..542b3f1808 100644 --- a/tests/check/pipelines/.gitignore +++ b/tests/check/pipelines/.gitignore @@ -2,6 +2,7 @@ basetime capsfilter-renegotiation gio +gl-launch-lines simple-launch-lines streamsynchronizer tcp diff --git a/tests/check/pipelines/gl-launch-lines.c b/tests/check/pipelines/gl-launch-lines.c new file mode 100644 index 0000000000..2289f6310a --- /dev/null +++ b/tests/check/pipelines/gl-launch-lines.c @@ -0,0 +1,365 @@ +/* GStreamer + * Copyright (C) 2012-2016 Matthew Waters + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +#ifndef GST_DISABLE_PARSE + +static GstElement * +setup_pipeline (const gchar * pipe_descr) +{ + GstElement *pipeline; + + pipeline = gst_parse_launch (pipe_descr, NULL); + g_return_val_if_fail (GST_IS_PIPELINE (pipeline), NULL); + return pipeline; +} + +/* + * run_pipeline: + * @pipe: the pipeline to run + * @desc: the description for use in messages + * @events: is a mask of expected events + * @tevent: is the expected terminal event. + * + * the poll call will time out after half a second. + */ +static void +run_pipeline (GstElement * pipe, const gchar * descr, + GstMessageType events, GstMessageType tevent, GstState target_state) +{ + GstBus *bus; + GstMessage *message; + GstMessageType revent; + GstStateChangeReturn ret; + + g_assert (pipe); + bus = gst_element_get_bus (pipe); + g_assert (bus); + + fail_if (gst_element_set_state (pipe, target_state) == + GST_STATE_CHANGE_FAILURE, "Could not set pipeline %s to playing", descr); + ret = gst_element_get_state (pipe, NULL, NULL, 10 * GST_SECOND); + if (ret == GST_STATE_CHANGE_ASYNC) { + g_critical ("Pipeline '%s' failed to go to PAUSED fast enough", descr); + goto done; + } else if ((ret != GST_STATE_CHANGE_SUCCESS) + && (ret != GST_STATE_CHANGE_NO_PREROLL)) { + g_critical ("Pipeline '%s' failed to go into PAUSED state (%s)", descr, + gst_element_state_change_return_get_name (ret)); + goto done; + } + + while (1) { + message = gst_bus_poll (bus, GST_MESSAGE_ANY, GST_SECOND / 2); + + /* always have to pop the message before getting back into poll */ + if (message) { + revent = GST_MESSAGE_TYPE (message); + gst_message_unref (message); + } else { + revent = GST_MESSAGE_UNKNOWN; + } + + if (revent == tevent) { + break; + } else if (revent == GST_MESSAGE_UNKNOWN) { + g_critical ("Unexpected timeout in gst_bus_poll, looking for %d: %s", + tevent, descr); + break; + } else if (revent & events) { + continue; + } + g_critical + ("Unexpected message received of type %d, '%s', looking for %d: %s", + revent, gst_message_type_get_name (revent), tevent, descr); + } + +done: + fail_if (gst_element_set_state (pipe, GST_STATE_NULL) == + GST_STATE_CHANGE_FAILURE, "Could not set pipeline %s to NULL", descr); + gst_element_get_state (pipe, NULL, NULL, GST_CLOCK_TIME_NONE); + gst_object_unref (pipe); + + gst_bus_set_flushing (bus, TRUE); + gst_object_unref (bus); +} + +GST_START_TEST (test_glimagesink) +{ + const gchar *s; + GstState target_state = GST_STATE_PLAYING; + + s = "videotestsrc num-buffers=10 ! glimagesink"; + run_pipeline (setup_pipeline (s), s, + GST_MESSAGE_ANY & ~(GST_MESSAGE_ERROR | GST_MESSAGE_WARNING), + GST_MESSAGE_UNKNOWN, target_state); +} + +GST_END_TEST +GST_START_TEST (test_glfiltercube) +{ + const gchar *s; + GstState target_state = GST_STATE_PLAYING; + + s = "videotestsrc num-buffers=10 ! glupload ! glfiltercube ! fakesink"; + run_pipeline (setup_pipeline (s), s, + GST_MESSAGE_ANY & ~(GST_MESSAGE_ERROR | GST_MESSAGE_WARNING), + GST_MESSAGE_UNKNOWN, target_state); +} + +GST_END_TEST +#define N_EFFECTS 18 +GST_START_TEST (test_gleffects) +{ + gchar *s; + GstState target_state = GST_STATE_PLAYING; + guint i; + + for (i = 0; i < N_EFFECTS; i++) { + s = g_strdup_printf ("videotestsrc num-buffers=10 ! glupload ! " + "gleffects effect=%i ! fakesink", i); + run_pipeline (setup_pipeline (s), s, + GST_MESSAGE_ANY & ~(GST_MESSAGE_ERROR | GST_MESSAGE_WARNING), + GST_MESSAGE_UNKNOWN, target_state); + g_free (s); + } +} + +GST_END_TEST +#undef N_EFFECTS +GST_START_TEST (test_glshader) +{ + const gchar *s; + GstState target_state = GST_STATE_PLAYING; + + s = "videotestsrc num-buffers=10 ! glupload ! glshader ! fakesink"; + run_pipeline (setup_pipeline (s), s, + GST_MESSAGE_ANY & ~(GST_MESSAGE_ERROR | GST_MESSAGE_WARNING), + GST_MESSAGE_UNKNOWN, target_state); + +#if GST_GL_HAVE_OPENGL + s = "gltestsrc num-buffers=10 ! glshader ! fakesink"; + run_pipeline (setup_pipeline (s), s, + GST_MESSAGE_ANY & ~(GST_MESSAGE_ERROR | GST_MESSAGE_WARNING), + GST_MESSAGE_UNKNOWN, target_state); +#endif +} + +GST_END_TEST +GST_START_TEST (test_glfilterapp) +{ + const gchar *s; + GstState target_state = GST_STATE_PLAYING; + + s = "videotestsrc num-buffers=10 ! glupload ! glfilterapp ! fakesink"; + run_pipeline (setup_pipeline (s), s, + GST_MESSAGE_ANY & ~(GST_MESSAGE_ERROR | GST_MESSAGE_WARNING), + GST_MESSAGE_UNKNOWN, target_state); + +#if GST_GL_HAVE_OPENGL + s = "gltestsrc num-buffers=10 ! glfilterapp ! fakesink"; + run_pipeline (setup_pipeline (s), s, + GST_MESSAGE_ANY & ~(GST_MESSAGE_ERROR | GST_MESSAGE_WARNING), + GST_MESSAGE_UNKNOWN, target_state); +#endif +} + +GST_END_TEST +#ifdef HAVE_PNG +#if HAVE_JPEG +GST_START_TEST (test_gloverlay) +{ + const gchar *s; + GstState target_state = GST_STATE_PLAYING; + + s = "videotestsrc num-buffers=10 ! glupload ! gloverlay ! fakesink"; + run_pipeline (setup_pipeline (s), s, + GST_MESSAGE_ANY & ~(GST_MESSAGE_ERROR | GST_MESSAGE_WARNING), + GST_MESSAGE_UNKNOWN, target_state); + +#if GST_GL_HAVE_OPENGL + s = "gltestsrc num-buffers=10 ! gloverlay ! fakesink"; + run_pipeline (setup_pipeline (s), s, + GST_MESSAGE_ANY & ~(GST_MESSAGE_ERROR | GST_MESSAGE_WARNING), + GST_MESSAGE_UNKNOWN, target_state); +#endif +} + +GST_END_TEST +#endif +#endif +#if GST_GL_HAVE_OPENGL +#define N_SRCS 13 +GST_START_TEST (test_gltestsrc) +{ + gchar *s; + GstState target_state = GST_STATE_PLAYING; + guint i; + + for (i = 0; i < N_SRCS; i++) { + s = g_strdup_printf ("gltestsrc pattern=%i num-buffers=10 ! fakesink", i); + run_pipeline (setup_pipeline (s), s, + GST_MESSAGE_ANY & ~(GST_MESSAGE_ERROR | GST_MESSAGE_WARNING), + GST_MESSAGE_UNKNOWN, target_state); + g_free (s); + } +} + +GST_END_TEST +#undef N_SRCS +GST_START_TEST (test_glfilterglass) +{ + const gchar *s; + GstState target_state = GST_STATE_PLAYING; + + s = "videotestsrc num-buffers=10 ! glupload ! glfilterglass ! fakesink"; + run_pipeline (setup_pipeline (s), s, + GST_MESSAGE_ANY & ~(GST_MESSAGE_ERROR | GST_MESSAGE_WARNING), + GST_MESSAGE_UNKNOWN, target_state); + + s = "gltestsrc num-buffers=10 ! glfilterglass ! fakesink"; + run_pipeline (setup_pipeline (s), s, + GST_MESSAGE_ANY & ~(GST_MESSAGE_ERROR | GST_MESSAGE_WARNING), + GST_MESSAGE_UNKNOWN, target_state); +} + +GST_END_TEST +#if 0 +GST_START_TEST (test_glfilterreflectedscreen) +{ + const gchar *s; + GstState target_state = GST_STATE_PLAYING; + + s = "videotestsrc num-buffers=10 ! glupload ! glfilterreflectedscreen ! " + "fakesink"; + run_pipeline (setup_pipeline (s), s, + GST_MESSAGE_ANY & ~(GST_MESSAGE_ERROR | GST_MESSAGE_WARNING), + GST_MESSAGE_UNKNOWN, target_state); + + s = "gltestsrc num-buffers=10 ! glfilterreflectedscreen ! fakesink"; + run_pipeline (setup_pipeline (s), s, + GST_MESSAGE_ANY & ~(GST_MESSAGE_ERROR | GST_MESSAGE_WARNING), + GST_MESSAGE_UNKNOWN, target_state); +} + +GST_END_TEST +#endif +GST_START_TEST (test_gldeinterlace) +{ + const gchar *s; + GstState target_state = GST_STATE_PLAYING; + + s = "videotestsrc num-buffers=10 ! glupload ! gldeinterlace ! fakesink"; + run_pipeline (setup_pipeline (s), s, + GST_MESSAGE_ANY & ~(GST_MESSAGE_ERROR | GST_MESSAGE_WARNING), + GST_MESSAGE_UNKNOWN, target_state); + + s = "gltestsrc num-buffers=10 ! gldeinterlace ! fakesink"; + run_pipeline (setup_pipeline (s), s, + GST_MESSAGE_ANY & ~(GST_MESSAGE_ERROR | GST_MESSAGE_WARNING), + GST_MESSAGE_UNKNOWN, target_state); +} + +GST_END_TEST +GST_START_TEST (test_glmosaic) +{ + const gchar *s; + GstState target_state = GST_STATE_PLAYING; + + s = "videotestsrc num-buffers=10 ! glupload ! glmosaic ! fakesink"; + run_pipeline (setup_pipeline (s), s, + GST_MESSAGE_ANY & ~(GST_MESSAGE_ERROR | GST_MESSAGE_WARNING), + GST_MESSAGE_UNKNOWN, target_state); + + s = "gltestsrc num-buffers=10 ! glmosaic ! fakesink"; + run_pipeline (setup_pipeline (s), s, + GST_MESSAGE_ANY & ~(GST_MESSAGE_ERROR | GST_MESSAGE_WARNING), + GST_MESSAGE_UNKNOWN, target_state); +} + +GST_END_TEST +#ifdef HAVE_PNG +GST_START_TEST (test_gldifferencematte) +{ + const gchar *s; + GstState target_state = GST_STATE_PLAYING; + + s = "videotestsrc num-buffers=10 ! glupload ! gldifferencematte ! fakesink"; + run_pipeline (setup_pipeline (s), s, + GST_MESSAGE_ANY & ~(GST_MESSAGE_ERROR | GST_MESSAGE_WARNING), + GST_MESSAGE_UNKNOWN, target_state); + + s = "gltestsrc num-buffers=10 ! gldifferencematte ! fakesink"; + run_pipeline (setup_pipeline (s), s, + GST_MESSAGE_ANY & ~(GST_MESSAGE_ERROR | GST_MESSAGE_WARNING), + GST_MESSAGE_UNKNOWN, target_state); +} + +GST_END_TEST +#endif /* HAVE_PNG */ +#endif /* GST_GL_HAVE_OPENGL */ +#endif /* !GST_DISABLE_PARSE */ +static Suite * +gl_launch_lines_suite (void) +{ + Suite *s = suite_create ("OpenGL pipelines"); + TCase *tc_chain = tcase_create ("linear"); + + /* time out after 60s, not the default 3 */ + tcase_set_timeout (tc_chain, 60); + + suite_add_tcase (s, tc_chain); +#ifndef GST_DISABLE_PARSE + tcase_add_test (tc_chain, test_glimagesink); + tcase_add_test (tc_chain, test_glfiltercube); + tcase_add_test (tc_chain, test_gleffects); + tcase_add_test (tc_chain, test_glshader); + tcase_add_test (tc_chain, test_glfilterapp); +#ifdef HAVE_PNG +#if HAVE_JPEG + tcase_add_test (tc_chain, test_gloverlay); +#endif +#endif +#if GST_GL_HAVE_OPENGL + tcase_add_test (tc_chain, test_gltestsrc); + tcase_add_test (tc_chain, test_glfilterglass); +/* tcase_add_test (tc_chain, test_glfilterreflectedscreen);*/ + /* glmosaic is still in -bad because it relies on GstVideoAggregator */ + if (gst_registry_check_feature_version (gst_registry_get (), "glmosaic", 1, 0, + 0)) { + tcase_add_test (tc_chain, test_glmosaic); + } + tcase_add_test (tc_chain, test_gldeinterlace); +#ifdef HAVE_PNG + tcase_add_test (tc_chain, test_gldifferencematte); +/* tcase_add_test (tc_chain, test_glbumper);*/ +#if HAVE_JPEG +#endif /* HAVE_JPEG */ +#endif /* HAVE_PNG */ +#endif /* GST_GL_HAVE_OPENGL */ +#endif /* !GST_DISABLE_PARSE */ + return s; +} + +GST_CHECK_MAIN (gl_launch_lines);