#ifndef ABSTRACTMONITOR_H
#define ABSTRACTMONITOR_H
+#include "definitions.h"
+
#include <QObject>
#include <QVector>
#include <QWidget>
#include <QImage>
-#include <QPainter>
#include <QFrame>
-#include <QTimer>
-
-class VideoPreviewContainer : public QFrame
-{
- Q_OBJECT
-public:
- VideoPreviewContainer(QWidget *parent = 0);
- ~VideoPreviewContainer();
- void setImage(QImage img);
- void start();
- void stop();
-
-protected:
- virtual void paintEvent(QPaintEvent */*event*/);
-
-private:
- QList <QImage *> m_imageQueue;
- QTimer m_refreshTimer;
-};
+#include <stdint.h>
+class MonitorManager;
+class VideoContainer;
class AbstractRender: public QObject
{
* @param name A unique identifier for this renderer
* @param winid The parent widget identifier (required for SDL display). Set to 0 for OpenGL rendering
* @param profile The MLT profile used for the renderer (default one will be used if empty). */
- AbstractRender(const QString &name, QWidget *parent = 0):QObject(parent), m_name(name), sendFrameForAnalysis(false) {};
+ explicit AbstractRender(Kdenlive::MonitorId name, QWidget *parent = 0)
+ : QObject(parent),
+ sendFrameForAnalysis(false),
+ analyseAudio(false),
+ m_name(name)
+ {
+ }
/** @brief Destroy the MLT Renderer. */
- virtual ~AbstractRender() {};
+ virtual ~AbstractRender() {}
/** @brief This property is used to decide if the renderer should convert it's frames to QImage for use in other Kdenlive widgets. */
bool sendFrameForAnalysis;
- const QString &name() const {return m_name;};
+ /** @brief This property is used to decide if the renderer should send audio data for monitoring. */
+ bool analyseAudio;
+
+ const QString &name() const {return m_name;}
/** @brief Someone needs us to send again a frame. */
virtual void sendFrameUpdate() = 0;
signals:
/** @brief The renderer refreshed the current frame. */
- void frameUpdated(QImage);
+ void frameUpdated(const QImage &);
/** @brief This signal contains the audio of the current frame. */
- void audioSamplesSignal(QVector<int16_t>, int, int, int);
+ void audioSamplesSignal(const QVector<int16_t>&,int,int,int);
};
+
+
+class VideoSurface : public QWidget
+{
+ Q_OBJECT
+public:
+ VideoSurface(QWidget *parent = 0);
+
+signals:
+ void refreshMonitor();
+
+protected:
+ virtual void paintEvent ( QPaintEvent * event );
+};
+
+
class AbstractMonitor : public QWidget
{
Q_OBJECT
public:
- AbstractMonitor(QWidget *parent = 0): QWidget(parent) {};
- virtual ~AbstractMonitor() {};
+ AbstractMonitor(Kdenlive::MonitorId id, MonitorManager *manager, QWidget *parent = 0);
+ Kdenlive::MonitorId id() {return m_id;}
+ virtual ~AbstractMonitor();
virtual AbstractRender *abstractRender() = 0;
- virtual const QString name() const = 0;
-
+ bool isActive() const;
+ VideoContainer *videoBox;
+ VideoSurface *videoSurface;
+ void createVideoSurface();
+
+
public slots:
virtual void stop() = 0;
virtual void start() = 0;
+ virtual void slotPlay() = 0;
+ virtual void slotMouseSeek(int eventDelta, bool fast) = 0;
+ bool slotActivateMonitor(bool forceRefresh = false);
+ virtual void slotSwitchFullScreen() = 0;
+
+protected:
+ Kdenlive::MonitorId m_id;
+ MonitorManager *m_monitorManager;
+};
+
+class VideoContainer : public QFrame
+{
+ Q_OBJECT
+public:
+ explicit VideoContainer(AbstractMonitor *monitor, QWidget *parent = 0);
+ void switchFullScreen();
+
+protected:
+ virtual void mouseDoubleClickEvent(QMouseEvent * event);
+ virtual void mouseReleaseEvent(QMouseEvent *event);
+ void keyPressEvent(QKeyEvent *event);
+ virtual void wheelEvent(QWheelEvent * event);
+
+private:
+ Qt::WindowFlags m_baseFlags;
+ AbstractMonitor *m_monitor;
};
#endif