]> git.sesse.net Git - kdenlive/blobdiff - src/blackmagic/capture.h
Stopmotion widget: Improved webcam support, taken from the fswebcam project
[kdenlive] / src / blackmagic / capture.h
index 491c63dc7acb08fd74871cd33aca19632e2a001c..1be79adb8cbf36074214f67b9ae3a69a3f98f873 100644 (file)
@@ -1,56 +1,74 @@
-#ifndef __CAPTURE_H__
-#define __CAPTURE_H__
+#ifndef __BMDCAPTURE_H__
+#define __BMDCAPTURE_H__
 
 #include "include/DeckLinkAPI.h"
+#include "../stopmotion/capturehandler.h"
 
 #include <QWidget>
 #include <QObject>
 #include <QLayout>
+#ifdef Q_WS_MAC
+#include <pthread.h>
+#endif
 
 class CDeckLinkGLWidget;
 class PlaybackDelegate;
 
-class DeckLinkCaptureDelegate : public IDeckLinkInputCallback
+class DeckLinkCaptureDelegate : public QObject, public IDeckLinkInputCallback
 {
+    Q_OBJECT
 public:
-       DeckLinkCaptureDelegate();
-       virtual ~DeckLinkCaptureDelegate();
+    DeckLinkCaptureDelegate();
+    virtual ~DeckLinkCaptureDelegate();
 
-       virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID /*iid*/, LPVOID */*ppv*/) { return E_NOINTERFACE; }
-       virtual ULONG STDMETHODCALLTYPE AddRef(void);
-       virtual ULONG STDMETHODCALLTYPE  Release(void);
-       virtual HRESULT STDMETHODCALLTYPE VideoInputFormatChanged(BMDVideoInputFormatChangedEvents, IDeckLinkDisplayMode*, BMDDetectedVideoInputFormatFlags);
-       virtual HRESULT STDMETHODCALLTYPE VideoInputFrameArrived(IDeckLinkVideoInputFrame*, IDeckLinkAudioInputPacket*);
+    virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID /*iid*/, LPVOID */*ppv*/) {
+        return E_NOINTERFACE;
+    }
+    virtual ULONG STDMETHODCALLTYPE AddRef(void);
+    virtual ULONG STDMETHODCALLTYPE  Release(void);
+    virtual HRESULT STDMETHODCALLTYPE VideoInputFormatChanged(BMDVideoInputFormatChangedEvents, IDeckLinkDisplayMode*, BMDDetectedVideoInputFormatFlags);
+    virtual HRESULT STDMETHODCALLTYPE VideoInputFrameArrived(IDeckLinkVideoInputFrame*, IDeckLinkAudioInputPacket*);
 
 private:
-       ULONG                           m_refCount;
-       pthread_mutex_t         m_mutex;
+    ULONG               m_refCount;
+    pthread_mutex_t     m_mutex;
+    QList <IDeckLinkVideoInputFrame*> m_framesList;
+    QStringList m_framePath;
+
+private slots:
+    void slotProcessFrame();
+
+signals:
+    void gotTimeCode(ulong);
+    void gotMessage(const QString &);
+    void frameSaved(const QString);
 };
 
-class CaptureHandler
+class BmdCaptureHandler : public CaptureHandler
 {
+    Q_OBJECT
 public:
-       CaptureHandler(QVBoxLayout *lay, QWidget *parent = 0);
-       ~CaptureHandler();
-       CDeckLinkGLWidget *previewView;
-       void startPreview(int deviceId, int captureMode);
-       void stopPreview();
-       void startCapture();
-       void stopCapture();
-       void captureFrame(const QString &fname);
-       void showOverlay(QImage img, bool transparent = true);
-       void hideOverlay();
-       void hidePreview(bool hide);
-       
+    BmdCaptureHandler(QVBoxLayout *lay, QWidget *parent = 0);
+    ~BmdCaptureHandler();
+    CDeckLinkGLWidget *previewView;
+    void startPreview(int deviceId, int captureMode, bool audio = true);
+    void stopPreview();
+    void startCapture(const QString &path);
+    void stopCapture();
+    void captureFrame(const QString &fname);
+    void showOverlay(QImage img, bool transparent = true);
+    void hideOverlay();
+    void hidePreview(bool hide);
+    QStringList getDeviceName(QString);
+    void setDevice(const QString input, QString size = QString());
+
 private:
-       IDeckLinkIterator               *deckLinkIterator;
-       DeckLinkCaptureDelegate         *delegate;
-       IDeckLinkDisplayMode            *displayMode;
-       IDeckLink                       *deckLink;
-       IDeckLinkInput                  *deckLinkInput;
-       IDeckLinkDisplayModeIterator    *displayModeIterator;
-       QVBoxLayout *m_layout;
-       QWidget *m_parent;
+    IDeckLinkIterator       *deckLinkIterator;
+    DeckLinkCaptureDelegate     *delegate;
+    IDeckLinkDisplayMode        *displayMode;
+    IDeckLink           *deckLink;
+    IDeckLinkInput          *deckLinkInput;
+    IDeckLinkDisplayModeIterator    *displayModeIterator;
 };