X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Frecmonitor.h;h=62d9459424954faae2230466f861f3555c4b18d9;hb=f69a24d18f8134c93e407ea485967ac31187da47;hp=c2f2c37ab3651cff660bd3cc84a0dfc03b2124f1;hpb=2044b5998dd63792fe93d955c00af9fb587702db;p=kdenlive diff --git a/src/recmonitor.h b/src/recmonitor.h index c2f2c37a..62d94594 100644 --- a/src/recmonitor.h +++ b/src/recmonitor.h @@ -17,10 +17,19 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ +/** +* @class RecMonitor +* @brief Records video via dvgrab, video4linux and recordmydesktop +* @author Jean-Baptiste Mardelle +*/ #ifndef RECMONITOR_H #define RECMONITOR_H +#include "widgets/abstractmonitor.h" +#include "definitions.h" +#include "ui_recmonitor_ui.h" + #include #include #include @@ -29,37 +38,62 @@ #include #include #include +#include +#include +#include +#include -#include "ui_recmonitor_ui.h" -#include "smallruler.h" +#if KDE_IS_VERSION(4,7,0) +#include +#endif -class RecMonitor : public QWidget { +class MonitorManager; +class MltDeviceCapture; +class AbstractRender; + +class RecMonitor : public AbstractMonitor, public Ui::RecMonitor_UI +{ Q_OBJECT public: - RecMonitor(QString name, QWidget *parent = 0); - QString name() const; - + explicit RecMonitor(Kdenlive::MonitorId name, MonitorManager *manager, QWidget *parent = 0); + ~RecMonitor(); + + AbstractRender *abstractRender(); + void analyseFrames(bool analyse); + enum CaptureDevice { + Firewire = 0, + Video4Linux = 1, + ScreenBag = 2, + BlackMagic = 3 + }; protected: - virtual void mousePressEvent(QMouseEvent * event); + void mousePressEvent(QMouseEvent * event); + void mouseDoubleClickEvent(QMouseEvent * event); private: - Ui::RecMonitor_UI ui; - QString m_tmpFolder; - QString m_name; - - bool m_isActive; - + KDateTime m_captureTime; + /** @brief Provide feedback about dvgrab operations */ + QLabel m_dvinfo; + + /** @brief Keeps a brief (max ten items) history of warning or error messages + * (currently only used for BLACKMAGIC). */ + KComboBox m_logger; + QString m_capturePath; + + KCapacityBar *m_freeSpace; + QTimer m_spaceTimer; KUrl m_captureFile; KIcon m_playIcon; KIcon m_pauseIcon; - QProcess *captureProcess; - QProcess *displayProcess; - QTimer *m_initTimer; + QProcess *m_captureProcess; + QProcess *m_displayProcess; bool m_isCapturing; + /** did the user capture something ? */ + bool m_didCapture; bool m_isPlaying; QStringList m_captureArgs; QStringList m_displayArgs; @@ -70,27 +104,63 @@ private: QAction *m_stopAction; QAction *m_discAction; + MonitorManager *m_manager; + MltDeviceCapture *m_captureDevice; + VideoContainer *m_videoBox; + QAction *m_addCapturedClip; + QAction *m_previewSettings; + QString m_error; + +#if KDE_IS_VERSION(4,7,0) + KMessageWidget *m_infoMessage; +#endif + + bool m_analyse; + void checkDeviceAvailability(); + QPixmap mergeSideBySide(const QPixmap& pix, const QString &txt); + void manageCapturedFiles(); + /** @brief Build MLT producer for device, using path as profile. */ + void buildMltDevice(const QString &path); + /** @brief Create string containing an XML playlist for v4l capture. */ + const QString getV4lXmlPlaylist(const MltVideoProfile &profile, bool *isXml); + /** @brief Display an error message to user. */ + void showWarningMessage(const QString &text, bool logAction = false); + private slots: - void slotStartCapture(bool play = true); - void slotStopCapture(); + void slotStartPreview(bool play = true); void slotRecord(); void slotProcessStatus(QProcess::ProcessState status); void slotVideoDeviceChanged(int ix); void slotRewind(); void slotForward(); void slotDisconnect(); + //void slotStartGrab(const QRect &rect); + void slotConfigure(); + void slotReadProcessInfo(); + void slotUpdateFreeSpace(); + void slotSetInfoMessage(const QString &message); + void slotDroppedFrames(int dropped); + /** @brief Change setting for preview while recording. */ + void slotChangeRecordingPreview(bool enable); + /** @brief Show last jog error log. */ + void slotShowLog(); public slots: void refreshRecMonitor(bool visible); + void slotPlay(); void stop(); void start(); - void activateRecMonitor(); - void slotPlay(); + void slotStopCapture(); + void slotUpdateCaptureFolder(const QString ¤tProjectFolder); + void slotMouseSeek(int eventDelta, bool fast); + void slotSwitchFullScreen(); signals: void renderPosition(int); void durationChanged(int); void addProjectClip(KUrl); + void addProjectClipList(KUrl::List); + void showConfigDialog(int, int); }; #endif