| #include <QApplication> |
| #include <QQmlApplicationEngine> |
| #include <QQuickWindow> |
| #include <QQuickItem> |
| #include <QQuickView> |
| #include <QRunnable> |
| #include <QDebug> |
| #include <gst/gst.h> |
| |
| class SetPlaying : public QRunnable |
| { |
| public: |
| SetPlaying(GstElement *); |
| ~SetPlaying(); |
| |
| void run (); |
| |
| private: |
| GstElement * pipeline_; |
| }; |
| |
| SetPlaying::SetPlaying (GstElement * pipeline) |
| { |
| this->pipeline_ = pipeline ? static_cast<GstElement *> (gst_object_ref (pipeline)) : NULL; |
| } |
| |
| SetPlaying::~SetPlaying () |
| { |
| if (this->pipeline_) |
| gst_object_unref (this->pipeline_); |
| |
| } |
| |
| void |
| SetPlaying::run () |
| { |
| if (this->pipeline_) |
| gst_element_set_state (this->pipeline_, GST_STATE_PLAYING); |
| } |
| |
| int main(int argc, char *argv[]) |
| { |
| int ret; |
| |
| QGuiApplication app(argc, argv); |
| gst_init (&argc, &argv); |
| |
| GstElement *pipeline = gst_pipeline_new (NULL); |
| GstElement *src = gst_element_factory_make ("qmlglsrc", NULL); |
| GstElement *sink = gst_element_factory_make ("glimagesink", NULL); |
| |
| g_assert (src && sink); |
| |
| gst_bin_add_many (GST_BIN (pipeline), src, sink, NULL); |
| gst_element_link_many (src, sink, NULL); |
| |
| QQmlApplicationEngine engine; |
| engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); |
| |
| QQuickWindow *rootObject; |
| |
| /* find and set the QQuickWindow on the src */ |
| rootObject = static_cast<QQuickWindow *> (engine.rootObjects().first()); |
| g_object_set(src, "window", rootObject, NULL); |
| g_object_set(src, "use-default-fbo", TRUE, NULL); |
| /* output buffer of qmlglsrc is vertical flip, get the image orientation tag */ |
| g_object_set(sink, "rotate-method", 8, NULL); |
| |
| rootObject->scheduleRenderJob (new SetPlaying (pipeline), |
| QQuickWindow::BeforeSynchronizingStage); |
| |
| ret = app.exec(); |
| |
| gst_element_set_state (pipeline, GST_STATE_NULL); |
| gst_object_unref (pipeline); |
| |
| gst_deinit (); |
| |
| return ret; |
| } |