summaryrefslogtreecommitdiff
path: root/tests/examples/overlay/qt-xoverlay.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/examples/overlay/qt-xoverlay.cpp')
-rw-r--r--tests/examples/overlay/qt-xoverlay.cpp54
1 files changed, 53 insertions, 1 deletions
diff --git a/tests/examples/overlay/qt-xoverlay.cpp b/tests/examples/overlay/qt-xoverlay.cpp
index a1ba7c37..7edfabb7 100644
--- a/tests/examples/overlay/qt-xoverlay.cpp
+++ b/tests/examples/overlay/qt-xoverlay.cpp
@@ -31,6 +31,53 @@
#include <QTimer>
#include <QWidget>
+/* slightly convoluted way to find a working video sink that's not a bin,
+ * one could use autovideosink from gst-plugins-good instead
+ */
+static GstElement *
+find_video_sink (void)
+{
+ GstStateChangeReturn sret;
+ GstElement *sink;
+
+ if ((sink = gst_element_factory_make ("xvimagesink", NULL))) {
+ sret = gst_element_set_state (sink, GST_STATE_READY);
+ if (sret == GST_STATE_CHANGE_SUCCESS)
+ return sink;
+
+ gst_element_set_state (sink, GST_STATE_NULL);
+ }
+ gst_object_unref (sink);
+
+ if ((sink = gst_element_factory_make ("ximagesink", NULL))) {
+ sret = gst_element_set_state (sink, GST_STATE_READY);
+ if (sret == GST_STATE_CHANGE_SUCCESS)
+ return sink;
+
+ gst_element_set_state (sink, GST_STATE_NULL);
+ }
+ gst_object_unref (sink);
+
+ if (strcmp (DEFAULT_VIDEOSINK, "xvimagesink") == 0 ||
+ strcmp (DEFAULT_VIDEOSINK, "ximagesink") == 0)
+ return NULL;
+
+ if ((sink = gst_element_factory_make (DEFAULT_VIDEOSINK, NULL))) {
+ if (GST_IS_BIN (sink)) {
+ gst_object_unref (sink);
+ return NULL;
+ }
+
+ sret = gst_element_set_state (sink, GST_STATE_READY);
+ if (sret == GST_STATE_CHANGE_SUCCESS)
+ return sink;
+
+ gst_element_set_state (sink, GST_STATE_NULL);
+ }
+ gst_object_unref (sink);
+ return NULL;
+}
+
int main(int argc, char *argv[])
{
if (!g_thread_supported ())
@@ -44,7 +91,11 @@ int main(int argc, char *argv[])
GstElement *pipeline = gst_pipeline_new ("xvoverlay");
GstElement *src = gst_element_factory_make ("videotestsrc", NULL);
- GstElement *sink = gst_element_factory_make ("xvimagesink", NULL);
+ GstElement *sink = find_video_sink ();
+
+ if (sink == NULL)
+ g_error ("Couldn't find a working video sink.");
+
gst_bin_add_many (GST_BIN (pipeline), src, sink, NULL);
gst_element_link (src, sink);
@@ -52,6 +103,7 @@ int main(int argc, char *argv[])
QWidget window;
window.resize(320, 240);
+ window.setWindowTitle("GstXOverlay Qt demo");
window.show();
WId xwinid = window.winId();