Skip to content
Snippets Groups Projects
VideoSurface.h 1.5 KiB
Newer Older
  • Learn to ignore specific revisions
  • /****************************************************************************
     *
    
     *   (c) 2009-2018 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
    
     *
     * QGroundControl is licensed according to the terms in the file
     * COPYING.md in the root of the source code directory.
     *
     ****************************************************************************/
    
    Gus Grubba's avatar
    Gus Grubba committed
    
    
    /**
     * @file
     *   @brief QGC Video Surface
     *   @author Gus Grubba <mavlink@grubba.com>
     */
    
    
    Gus Grubba's avatar
    Gus Grubba committed
    
    #include <QtCore/QObject>
    
    
    #if defined(QGC_GST_STREAMING)
    
    Gus Grubba's avatar
    Gus Grubba committed
    #include <gst/gst.h>
    
    Gus Grubba's avatar
    Gus Grubba committed
    
    
    #if defined(QGC_GST_STREAMING)
    
    Gus Grubba's avatar
    Gus Grubba committed
    class VideoSurfacePrivate;
    
    Gus Grubba's avatar
    Gus Grubba committed
    
    class VideoSurface : public QObject
    {
        Q_OBJECT
        Q_DISABLE_COPY(VideoSurface)
    public:
        explicit VideoSurface(QObject *parent = 0);
        virtual ~VideoSurface();
    
        /*! Returns the video sink element that provides this surface's image.
         * The element will be constructed the first time that this function
         * is called. The surface will always keep a reference to this element.
         */
    
    #if defined(QGC_GST_STREAMING)
    
        GstElement* videoSink();
    
    dogmaphobic's avatar
    dogmaphobic committed
        time_t      lastFrame() { return _lastFrame; }
        void        setLastFrame(time_t t) { _lastFrame = t; }
    
    Gus Grubba's avatar
    Gus Grubba committed
    
    protected:
    
    #if defined(QGC_GST_STREAMING)
    
    Gus Grubba's avatar
    Gus Grubba committed
        void onUpdate();
        static void onUpdateThunk(GstElement* sink, gpointer data);
    
    Gus Grubba's avatar
    Gus Grubba committed
    
    private:
        friend class VideoItem;
    
    #if defined(QGC_GST_STREAMING)
    
    Gus Grubba's avatar
    Gus Grubba committed
        VideoSurfacePrivate * const _data;
    
        time_t  _lastFrame;
        bool    _refed;
    
    Gus Grubba's avatar
    Gus Grubba committed
    };
    
    Q_DECLARE_METATYPE(VideoSurface*)