Skip to content
Snippets Groups Projects
Select Git revision
  • f070afb3791b62eb0053f6f83f7d5093d628e5f6
  • master default protected
  • release/202005
  • release/202001
  • release/201912
  • release/201911
  • release/releaseWindowsTestOne
  • release/releaseTest
  • release/releaseWindowsTest
  • release/windowsReleaseTest
  • release/201910
  • release/qt/201910
  • release/windows-test/201910
  • release/201908
  • release/201906
  • release/201905
  • release/201904
  • release/201903
  • release/201902
  • release/201901
  • release/201812
  • 1.0.0
  • 0.3.0
  • 0.2.1
  • 0.2.0
  • 0.1.0
26 results

videorenderer.h

Blame
  • user avatar
    Emmanuel Lepage Vallee authored
    f070afb3
    History
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    videorenderer.h 3.00 KiB
    /****************************************************************************
     *   Copyright (C) 2012-2013 by Savoir-Faire Linux                          *
     *   Author : Emmanuel Lepage Vallee <emmanuel.lepage@savoirfairelinux.com> *
     *                                                                          *
     *   This library is free software; you can redistribute it and/or          *
     *   modify it under the terms of the GNU Lesser General Public             *
     *   License as published by the Free Software Foundation; either           *
     *   version 2.1 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      *
     *   Lesser General Public License for more details.                        *
     *                                                                          *
     *   You should have received a copy of the GNU General Public License      *
     *   along with this program.  If not, see <http://www.gnu.org/licenses/>.  *
     ***************************************************************************/
    #ifndef VIDEO_RENDERER_H
    #define VIDEO_RENDERER_H
    
    //Base
    #include <QtCore/QObject>
    #include "typedefs.h"
    
    //Qt
    class QTimer;
    
    //SFLPhone
    #include "videodevice.h"
    struct SHMHeader;
    
    ///Manage shared memory and convert it to QByteArray
    class LIB_EXPORT VideoRenderer : public QObject {
       #pragma GCC diagnostic push
       #pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant"
       Q_OBJECT
       #pragma GCC diagnostic pop
    
       public:
          //Constructor
          VideoRenderer (QString shmPath,Resolution res);
          ~VideoRenderer();
    
          //Mutators
          bool resizeShm();
          void stopShm  ();
          bool startShm ();
    
          //Getters
          QByteArray  renderToBitmap(QByteArray& data, bool& ok);
          const char* rawData            ();
          bool        isRendering        ();
          QByteArray  currentFrame    ();
          Resolution  activeResolution();
    
          //Setters
          void setResolution(QSize   size);
          void setShmPath   (QString path);
    
       private:
          //Attributes
          uint       m_Width      ;
          uint       m_Height     ;
          QString    m_ShmPath    ;
          int        fd           ;
          SHMHeader* m_pShmArea   ;
          signed int m_ShmAreaLen ;
          uint       m_BufferGen  ;
          bool       m_isRendering;
          QTimer*    m_pTimer     ;
          QByteArray m_Frame      ;
          Resolution m_Res        ;
    
          //Constants
          static const int TIMEOUT_SEC = 1; // 1 second
    
          //Helpers
          timespec createTimeout();
          bool     shmLock      ();
          void     shmUnlock    ();
    
       private Q_SLOTS:
          void timedEvents();
    
       public Q_SLOTS:
          void startRendering();
          void stopRendering ();
    
       Q_SIGNALS:
          ///Emitted when a new frame is ready
          void frameUpdated();
    
    };
    
    #endif