diff options
Diffstat (limited to 'tests/examples/overlay/qtgv-xoverlay.cpp')
-rw-r--r-- | tests/examples/overlay/qtgv-xoverlay.cpp | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/tests/examples/overlay/qtgv-xoverlay.cpp b/tests/examples/overlay/qtgv-xoverlay.cpp new file mode 100644 index 00000000..74159c4b --- /dev/null +++ b/tests/examples/overlay/qtgv-xoverlay.cpp @@ -0,0 +1,88 @@ +/* GStreamer + * Copyright (C) <2010> Alexander Bokovoy <ab@samba.org> + * + * qtgv-xoverlay: demonstrate overlay handling using qt graphics view + * + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "qtgv-xoverlay.h" + +#include <QApplication> +#include <QTimer> + +#include <gst/interfaces/xoverlay.h> + +SinkPipeline::SinkPipeline(QGraphicsView *parent) : QObject(parent) +{ + pipeline = gst_pipeline_new ("xvoverlay"); + src = gst_element_factory_make ("videotestsrc", NULL); + sink = gst_element_factory_make ("xvimagesink", NULL); + gst_bin_add_many (GST_BIN (pipeline), src, sink, NULL); + gst_element_link (src, sink); + xwinid = parent->winId(); +} + +SinkPipeline::~SinkPipeline() +{ + gst_element_set_state (pipeline, GST_STATE_NULL); + gst_object_unref (pipeline); +} + +void SinkPipeline::startPipeline() +{ + GstStateChangeReturn sret; + + /* we know what the video sink is in this case (xvimagesink), so we can + * just set it directly here now (instead of waiting for a prepare-xwindow-id + * element message in a sync bus handler and setting it there) */ + + gst_x_overlay_set_xwindow_id (GST_X_OVERLAY (sink), xwinid); + + sret = gst_element_set_state (pipeline, GST_STATE_PLAYING); + if (sret == GST_STATE_CHANGE_FAILURE) { + gst_element_set_state (pipeline, GST_STATE_NULL); + gst_object_unref (pipeline); + /* Exit application */ + QTimer::singleShot(0, QApplication::activeWindow(), SLOT(quit())); + } +} + +int main( int argc, char **argv ) +{ + QApplication app(argc, argv); + + QGraphicsScene scene; + scene.setSceneRect( -100.0, -100.0, 200.0, 200.0 ); + + QGraphicsView view( &scene ); + view.resize(320, 240); + view.show(); + + gst_init (&argc, &argv); + SinkPipeline pipeline(&view); + pipeline.startPipeline(); + + int ret = app.exec(); + + view.hide(); + + return ret; +} |