diff options
Diffstat (limited to 'tests/examples/overlay/qtgv-xoverlay.cpp')
-rw-r--r-- | tests/examples/overlay/qtgv-xoverlay.cpp | 42 |
1 files changed, 41 insertions, 1 deletions
diff --git a/tests/examples/overlay/qtgv-xoverlay.cpp b/tests/examples/overlay/qtgv-xoverlay.cpp index 74159c4b..69252864 100644 --- a/tests/examples/overlay/qtgv-xoverlay.cpp +++ b/tests/examples/overlay/qtgv-xoverlay.cpp @@ -32,9 +32,48 @@ SinkPipeline::SinkPipeline(QGraphicsView *parent) : QObject(parent) { + GstStateChangeReturn sret; + pipeline = gst_pipeline_new ("xvoverlay"); src = gst_element_factory_make ("videotestsrc", NULL); - sink = gst_element_factory_make ("xvimagesink", NULL); + + if ((sink = gst_element_factory_make ("xvimagesink", NULL))) { + sret = gst_element_set_state (sink, GST_STATE_READY); + if (sret != GST_STATE_CHANGE_SUCCESS) { + 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) { + gst_element_set_state (sink, GST_STATE_NULL); + gst_object_unref (sink); + + if (strcmp (DEFAULT_VIDEOSINK, "xvimagesink") != 0 && + strcmp (DEFAULT_VIDEOSINK, "ximagesink") != 0) { + + if ((sink = gst_element_factory_make (DEFAULT_VIDEOSINK, NULL))) { + if (!GST_IS_BIN (sink)) { + sret = gst_element_set_state (sink, GST_STATE_READY); + if (sret != GST_STATE_CHANGE_SUCCESS) { + gst_element_set_state (sink, GST_STATE_NULL); + gst_object_unref (sink); + sink = NULL; + } + } else { + gst_object_unref (sink); + sink = NULL; + } + } + } + } + } + } + } + + 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); xwinid = parent->winId(); @@ -74,6 +113,7 @@ int main( int argc, char **argv ) QGraphicsView view( &scene ); view.resize(320, 240); + view.setWindowTitle("GstXOverlay Qt GraphicsView demo"); view.show(); gst_init (&argc, &argv); |