]> git.sesse.net Git - kdenlive/commitdiff
Preliminary support for blackmagic capture (only .raw format for now, cannot be read...
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 12 Oct 2010 22:21:12 +0000 (22:21 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 12 Oct 2010 22:21:12 +0000 (22:21 +0000)
svn path=/trunk/kdenlive/; revision=4987

src/blackmagic/capture.cpp
src/blackmagic/capture.h
src/kdenlivesettings.kcfg
src/recmonitor.cpp
src/recmonitor.h
src/stopmotion/stopmotion.cpp
src/stopmotion/stopmotion.h
src/widgets/configcapture_ui.ui
src/widgets/recmonitor_ui.ui
src/widgets/stopmotion_ui.ui

index e6e618c5035f9de65438d26bcc7c43ca4ffc8ed6..021413b00b5bf773fa46adfc6e48a13a75808c54 100644 (file)
@@ -45,6 +45,7 @@
 #endif
 
 #include <KDebug>
+#include <KLocale>
 
 #include "capture.h"
 #include "kdenlivesettings.h"
@@ -58,8 +59,6 @@ static BMDTimecodeFormat              g_timecodeFormat = 0;
 static int                                             g_videoModeIndex = -1;
 static int                                             g_audioChannels = 2;
 static int                                             g_audioSampleDepth = 16;
-const char *                                   g_videoOutputFile = NULL;
-const char *                                   g_audioOutputFile = NULL;
 static int                                             g_maxFrames = -1;
 static QString                                         doCaptureFrame;
 static double                          g_aspect_ratio = 16.0 / 9.0;
@@ -416,6 +415,7 @@ HRESULT DeckLinkCaptureDelegate::VideoInputFrameArrived(IDeckLinkVideoInputFrame
 
                if (videoFrame->GetFlags() & bmdFrameHasNoInputSource)
                {
+                       emit gotMessage(i18n("Frame (%1) - No input signal", frameCount));
                        fprintf(stderr, "Frame received (#%lu) - No input signal detected\n", frameCount);
                }
                else
@@ -429,7 +429,8 @@ HRESULT DeckLinkCaptureDelegate::VideoInputFrameArrived(IDeckLinkVideoInputFrame
                                        timecode->GetString(&timecodeString);
                                }
                        }
-
+                       // There seems to be No timecode with HDMI... Using frame number
+                       emit gotTimeCode(frameCount);
                        /*fprintf(stderr, "Frame received (#%lu) [%s] - %s - Size: %li bytes\n",
                                frameCount,
                                timecodeString != NULL ? timecodeString : "No timecode",
@@ -588,6 +589,7 @@ void CaptureHandler::startPreview(int deviceId, int captureMode)
 
        if (!deckLinkIterator)
        {
+               emit gotMessage(i18n("This application requires the DeckLink drivers installed."));
                fprintf(stderr, "This application requires the DeckLink drivers installed.\n");
                stopCapture();
                return;
@@ -599,6 +601,7 @@ void CaptureHandler::startPreview(int deviceId, int captureMode)
        if (result != S_OK)
        {
                fprintf(stderr, "No DeckLink PCI cards found.\n");
+               emit gotMessage(i18n("No DeckLink PCI cards found."));
                stopCapture();
                return;
        }
@@ -610,6 +613,8 @@ void CaptureHandler::startPreview(int deviceId, int captureMode)
        }
 
        delegate = new DeckLinkCaptureDelegate();
+       connect(delegate, SIGNAL(gotTimeCode(ulong)), this, SIGNAL(gotTimeCode(ulong)));
+       connect(delegate, SIGNAL(gotMessage(const QString &)), this, SIGNAL(gotMessage(const QString &)));
        deckLinkInput->SetCallback(delegate);
 
        previewView = new CDeckLinkGLWidget(deckLinkInput, m_parent);
@@ -622,6 +627,7 @@ void CaptureHandler::startPreview(int deviceId, int captureMode)
        result = deckLinkInput->GetDisplayModeIterator(&displayModeIterator);
        if (result != S_OK)
        {
+               emit gotMessage(i18n("Could not obtain the video output display mode iterator - result = ", result));
                fprintf(stderr, "Could not obtain the video output display mode iterator - result = %08x\n", result);
                stopCapture();
                return;
@@ -701,16 +707,18 @@ void CaptureHandler::startPreview(int deviceId, int captureMode)
 
        if (g_videoModeIndex < 0)
        {
+               emit gotMessage(i18n("No video mode specified"));
                fprintf(stderr, "No video mode specified\n");
                stopCapture();
                return;
        }
-       //g_videoOutputFile="/home/one/bm.raw";
-       if (g_videoOutputFile != NULL)
+
+       /*if (g_videoOutputFile != NULL)
        {
                videoOutputFile = open(g_videoOutputFile, O_WRONLY|O_CREAT|O_TRUNC, 0664);
                if (videoOutputFile < 0)
                {
+                       emit gotMessage(i18n("Could not open video output file %1", g_videoOutputFile));
                        fprintf(stderr, "Could not open video output file \"%s\"\n", g_videoOutputFile);
    stopCapture();
                }
@@ -720,10 +728,11 @@ void CaptureHandler::startPreview(int deviceId, int captureMode)
                audioOutputFile = open(g_audioOutputFile, O_WRONLY|O_CREAT|O_TRUNC, 0664);
                if (audioOutputFile < 0)
                {
+                   emit gotMessage(i18n("Could not open audio output file %1", g_audioOutputFile));
                        fprintf(stderr, "Could not open audio output file \"%s\"\n", g_audioOutputFile);
    stopCapture();
                }
-       }
+       }*/
 
        while (displayModeIterator->Next(&displayMode) == S_OK)
        {
@@ -742,6 +751,7 @@ void CaptureHandler::startPreview(int deviceId, int captureMode)
 
                        if (result == bmdDisplayModeNotSupported)
                        {
+                               emit gotMessage(i18n("The display mode %1 is not supported with the selected pixel format", displayModeName));
                                fprintf(stderr, "The display mode %s is not supported with the selected pixel format\n", displayModeName);
                                stopCapture();
                                return;
@@ -751,6 +761,7 @@ void CaptureHandler::startPreview(int deviceId, int captureMode)
                        {
                                if (!(displayMode->GetFlags() & bmdDisplayModeSupports3D))
                                {
+                                       emit gotMessage(i18n("The display mode %1 is not supported with 3D", displayModeName));
                                        fprintf(stderr, "The display mode %s is not supported with 3D\n", displayModeName);
                                        stopCapture();
                                        return;
@@ -765,6 +776,7 @@ void CaptureHandler::startPreview(int deviceId, int captureMode)
 
        if (!foundDisplayMode)
        {
+               emit gotMessage(i18n("Invalid mode %1 specified", g_videoModeIndex));
                fprintf(stderr, "Invalid mode %d specified\n", g_videoModeIndex);
                stopCapture();
                return;
@@ -773,6 +785,7 @@ void CaptureHandler::startPreview(int deviceId, int captureMode)
     result = deckLinkInput->EnableVideoInput(selectedDisplayMode, pixelFormat, inputFlags);
     if(result != S_OK)
     {
+               emit gotMessage(i18n("Failed to enable video input. Is another application using the card?"));
                fprintf(stderr, "Failed to enable video input. Is another application using the card?\n");
                stopCapture();
                return;
@@ -789,6 +802,7 @@ void CaptureHandler::startPreview(int deviceId, int captureMode)
     if(result != S_OK)
     {
         qDebug()<<"/// CAPTURE FAILED....";
+       emit gotMessage(i18n("Capture failed"));
     }
 
        // All Okay.
@@ -834,12 +848,42 @@ CaptureHandler::~CaptureHandler()
     stopCapture();
 }
 
-void CaptureHandler::startCapture()
+void CaptureHandler::startCapture(const QString &path)
 {
+    int i = 0;
+    QString videopath = path + "_video_" + QString::number(i).rightJustified(4, '0', false) + ".raw";
+    QString audiopath = path + "_audio_" + QString::number(i).rightJustified(4, '0', false) + ".raw";
+    while (QFile::exists(videopath) || QFile::exists(audiopath)) {
+       i++;
+       videopath = path + "_video_" + QString::number(i).rightJustified(4, '0', false) + ".raw";
+       audiopath = path + "_audio_" + QString::number(i).rightJustified(4, '0', false) + ".raw";
+    }
+    videoOutputFile = open(videopath.toUtf8().constData(), O_WRONLY|O_CREAT|O_TRUNC, 0664);
+    if (videoOutputFile < 0)
+    {
+       emit gotMessage(i18n("Could not open video output file %1", videopath));
+       fprintf(stderr, "Could not open video output file \"%s\"\n", videopath.toUtf8().constData());
+       return;
+    }
+    if (KdenliveSettings::hdmicaptureaudio()) {
+       audioOutputFile = open(audiopath.toUtf8().constData(), O_WRONLY|O_CREAT|O_TRUNC, 0664);
+       if (audioOutputFile < 0)
+       {
+           emit gotMessage(i18n("Could not open audio output file %1", audiopath));
+           fprintf(stderr, "Could not open video output file \"%s\"\n", audiopath.toUtf8().constData());
+           return;
+       }
+    }
 }
 
 void CaptureHandler::stopCapture()
 {
+       if (videoOutputFile)
+               close(videoOutputFile);
+       if (audioOutputFile)
+               close(audioOutputFile);
+       videoOutputFile = -1;
+       audioOutputFile = -1;
 }
 
 void CaptureHandler::captureFrame(const QString &fname)
index 491c63dc7acb08fd74871cd33aca19632e2a001c..c876affd668c0cb96970353ae237380d4e64fb3e 100644 (file)
@@ -10,8 +10,9 @@
 class CDeckLinkGLWidget;
 class PlaybackDelegate;
 
-class DeckLinkCaptureDelegate : public IDeckLinkInputCallback
+class DeckLinkCaptureDelegate : public QObject, public IDeckLinkInputCallback
 {
+Q_OBJECT
 public:
        DeckLinkCaptureDelegate();
        virtual ~DeckLinkCaptureDelegate();
@@ -25,17 +26,21 @@ public:
 private:
        ULONG                           m_refCount;
        pthread_mutex_t         m_mutex;
+signals:
+       void gotTimeCode(ulong);
+       void gotMessage(const QString &);
 };
 
-class CaptureHandler
+class CaptureHandler : public QObject
 {
+  Q_OBJECT
 public:
        CaptureHandler(QVBoxLayout *lay, QWidget *parent = 0);
        ~CaptureHandler();
        CDeckLinkGLWidget *previewView;
        void startPreview(int deviceId, int captureMode);
        void stopPreview();
-       void startCapture();
+       void startCapture(const QString &path);
        void stopCapture();
        void captureFrame(const QString &fname);
        void showOverlay(QImage img, bool transparent = true);
@@ -51,6 +56,10 @@ private:
        IDeckLinkDisplayModeIterator    *displayModeIterator;
        QVBoxLayout *m_layout;
        QWidget *m_parent;
+
+signals:
+       void gotTimeCode(ulong);
+       void gotMessage(const QString &);
 };
 
 
index bcaaf4c4b8850b1ddfd9f7c3506fc821d6c2130c..6c2d17e976f396175f31e2a5beead71578af16c8 100644 (file)
       <label>default HDMI capture mode.</label>
       <default>0</default>
     </entry>
+
+    <entry name="hdmifilename" type="String">
+      <label>default HDMI capture filename.</label>
+      <default>capture</default>
+    </entry>
+
+    <entry name="hdmicaptureaudio" type="Bool">
+      <label>Should we capture HDMI audio.</label>
+      <default>true</default>
+    </entry>
+    
     
   </group>
 
index 24cdd8119e3a969c7b18cf4d9ee2df40c8a014e7..b5dac1600e83596dfbc77a7cb5013c37746161df 100644 (file)
@@ -50,7 +50,9 @@ RecMonitor::RecMonitor(QString name, QWidget *parent) :
     m_isActive(false),
     m_isCapturing(false),
     m_didCapture(false),
-    m_isPlaying(false)
+    m_isPlaying(false),
+    m_bmCapture(NULL),
+    m_hdmiCapturing(false)
 {
     setupUi(this);
 
@@ -58,8 +60,6 @@ RecMonitor::RecMonitor(QString name, QWidget *parent) :
     device_selector->setCurrentIndex(KdenliveSettings::defaultcapture());
     connect(device_selector, SIGNAL(currentIndexChanged(int)), this, SLOT(slotVideoDeviceChanged(int)));
 
-
-
     QToolBar *toolbar = new QToolBar(name, this);
     QHBoxLayout *layout = new QHBoxLayout;
     layout->setContentsMargins(0, 0, 0, 0);
@@ -92,8 +92,12 @@ RecMonitor::RecMonitor(QString name, QWidget *parent) :
     configAction->setCheckable(false);
 
     layout->addWidget(toolbar);
-
+    layout->addWidget(&m_logger);
     layout->addWidget(&m_dvinfo);
+    m_logger.setMaxCount(10);
+    m_logger.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+    m_logger.setFrame(false);
+    //m_logger.setInsertPolicy(QComboBox::InsertAtTop);
 
 #if KDE_IS_VERSION(4,2,0)
     m_freeSpace = new KCapacityBar(KCapacityBar::DrawTextInline, this);
@@ -179,6 +183,12 @@ void RecMonitor::slotUpdateCaptureFolder(const QString currentProjectFolder)
 
 void RecMonitor::slotVideoDeviceChanged(int ix)
 {
+    QString capturefile;
+    QString capturename;
+    m_fwdAction->setVisible(ix != HDMI);
+    m_discAction->setVisible(ix != HDMI);
+    m_rewAction->setVisible(ix != HDMI);
+    m_logger.setVisible(ix == HDMI);
     switch (ix) {
     case SCREENGRAB:
         m_discAction->setEnabled(false);
@@ -204,6 +214,21 @@ void RecMonitor::slotVideoDeviceChanged(int ix)
         m_playAction->setEnabled(true);
         checkDeviceAvailability();
         break;
+    case HDMI:
+       createHDMIDevice();
+        m_recAction->setEnabled(false);
+        m_stopAction->setEnabled(false);
+        m_playAction->setEnabled(true);
+       video_capture->setHidden(true);
+       video_frame->setHidden(false);
+
+       capturefile = m_capturePath;
+        if (!capturefile.endsWith("/")) capturefile.append("/");
+       capturename = KdenliveSettings::hdmifilename();
+       capturename.append("xxx.raw");
+        capturefile.append(capturename);           
+       video_frame->setPixmap(mergeSideBySide(KIcon("camera-photo").pixmap(QSize(50, 50)), i18n("Plug your camcorder and\npress play button\nto start preview.\nFiles will be saved in:\n%1", capturefile)));
+       break;
     default: // FIREWIRE
         m_discAction->setEnabled(true);
         m_recAction->setEnabled(false);
@@ -219,9 +244,9 @@ void RecMonitor::slotVideoDeviceChanged(int ix)
             else KdenliveSettings::setDvgrab_path(dvgrabpath);
         } else {
             // Show capture info
-            QString capturefile = m_capturePath;
+            capturefile = m_capturePath;
             if (!capturefile.endsWith("/")) capturefile.append("/");
-            QString capturename = KdenliveSettings::dvgrabfilename();
+            capturename = KdenliveSettings::dvgrabfilename();
             if (capturename.isEmpty()) capturename = "capture";
             QString extension;
             switch (KdenliveSettings::firewireformat()) {
@@ -244,6 +269,28 @@ void RecMonitor::slotVideoDeviceChanged(int ix)
     }
 }
 
+void RecMonitor::createHDMIDevice()
+{
+       //video_capture->setVisible(true);
+       if (m_bmCapture == NULL) {
+           QVBoxLayout *lay = new QVBoxLayout;
+           m_bmCapture = new CaptureHandler(lay);
+           connect(m_bmCapture, SIGNAL(gotTimeCode(ulong)), this, SLOT(slotGotHDMIFrameNumber(ulong)));
+           connect(m_bmCapture, SIGNAL(gotMessage(const QString &)), this, SLOT(slotGotHDMIMessage(const QString &)));
+           video_capture->setLayout(lay);
+       }
+}
+
+void RecMonitor::slotGotHDMIFrameNumber(ulong ix)
+{
+    m_dvinfo.setText(QString::number(ix));
+}
+
+void RecMonitor::slotGotHDMIMessage(const QString &message)
+{
+    m_logger.insertItem(0, message);
+}
+
 QPixmap RecMonitor::mergeSideBySide(const QPixmap& pix, const QString txt)
 {
     QPainter p;
@@ -320,6 +367,14 @@ void RecMonitor::slotStopCapture()
         m_captureProcess->write("q\n", 3);
         QTimer::singleShot(1000, m_captureProcess, SLOT(kill()));
         break;
+    case HDMI:
+       video_capture->setHidden(true);
+       video_frame->setHidden(false);
+       m_bmCapture->stopPreview();
+       m_playAction->setEnabled(true);
+       m_stopAction->setEnabled(false);
+       m_recAction->setEnabled(false);
+       break;
     default:
         break;
     }
@@ -398,11 +453,19 @@ void RecMonitor::slotStartCapture(bool play)
         kDebug() << "Capture: Running ffmpeg " << m_captureArgs.join(" ");
         m_captureProcess->start("ffmpeg", m_captureArgs);
         break;
+    case HDMI:
+       video_capture->setVisible(true);
+       video_frame->setHidden(true);
+       m_bmCapture->startPreview(KdenliveSettings::hdmicapturedevice(), KdenliveSettings::hdmicapturemode());
+       m_playAction->setEnabled(false);
+       m_stopAction->setEnabled(true);
+       m_recAction->setEnabled(true);
+       break;
     default:
         break;
     }
 
-    if (device_selector->currentIndex() != SCREENGRAB) {
+    if (device_selector->currentIndex() == FIREWIRE || device_selector->currentIndex() == VIDEO4LINUX) {
         kDebug() << "Capture: Running ffplay " << m_displayArgs.join(" ");
         m_displayProcess->start("ffplay", m_displayArgs);
         video_frame->setText(i18n("Initialising..."));
@@ -413,6 +476,23 @@ void RecMonitor::slotStartCapture(bool play)
 
 void RecMonitor::slotRecord()
 {
+    if (device_selector->currentIndex() == HDMI) {
+       if (m_hdmiCapturing) {
+           // We are capturing, stop it
+           m_bmCapture->stopCapture();
+           m_hdmiCapturing = false;
+       }
+       else {
+           // Start capture, get capture filename first
+           QString path = m_capturePath;
+           if (!path.endsWith("/")) path.append("/");
+           path.append(KdenliveSettings::hdmifilename());
+           m_bmCapture->startCapture(path);
+           m_hdmiCapturing = true;
+       }
+       return;
+    }
+  
     if (m_captureProcess->state() == QProcess::NotRunning && device_selector->currentIndex() == FIREWIRE) {
         slotStartCapture();
     }
index ad41b0ca5f294a07c507d390b4c302e99f346fd7..f819c0769cbb51beed777cd6f9c24062dd69ec27 100644 (file)
@@ -26,6 +26,7 @@
 #ifndef RECMONITOR_H
 #define RECMONITOR_H
 
+#include "blackmagic/capture.h"
 #include "ui_recmonitor_ui.h"
 
 #include <QToolBar>
@@ -38,6 +39,7 @@
 #include <KRestrictedLine>
 #include <KDateTime>
 #include <kdeversion.h>
+#include <KComboBox>
 
 #if KDE_IS_VERSION(4,2,0)
 #include <kcapacitybar.h>
@@ -53,7 +55,7 @@ public:
 
     QString name() const;
 
-    enum CAPTUREDEVICE {FIREWIRE = 0, VIDEO4LINUX = 1, SCREENGRAB = 2};
+    enum CAPTUREDEVICE {FIREWIRE = 0, VIDEO4LINUX = 1, SCREENGRAB = 2, HDMI = 3};
 
 protected:
     virtual void mousePressEvent(QMouseEvent * event);
@@ -62,7 +64,12 @@ private:
     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 HDMI). */
+    KComboBox m_logger;
     QString m_capturePath;
 
 #if KDE_IS_VERSION(4,2,0)
@@ -91,6 +98,10 @@ private:
     void checkDeviceAvailability();
     QPixmap mergeSideBySide(const QPixmap& pix, const QString txt);
     void manageCapturedFiles();
+    CaptureHandler *m_bmCapture;
+    /** @brief Indicates whether we are currently capturing from HDMI. */
+    bool m_hdmiCapturing;
+    void createHDMIDevice();
 
 private slots:
     void slotStartCapture(bool play = true);
@@ -105,6 +116,8 @@ private slots:
     void slotConfigure();
     void slotReadDvgrabInfo();
     void slotUpdateFreeSpace();
+    void slotGotHDMIFrameNumber(ulong ix);
+    void slotGotHDMIMessage(const QString &message);
 
 public slots:
     void refreshRecMonitor(bool visible);
index 674192862e4e228ebaee33772ab416cdb7255d0d..2522cd3bc6d10b97de3aac437fd0e8622bb812d6 100644 (file)
@@ -105,6 +105,7 @@ StopmotionWidget::StopmotionWidget(KUrl projectFolder, QWidget *parent) :
     BMInterface::getBlackMagicDeviceList(capture_device, NULL);
     QVBoxLayout *lay = new QVBoxLayout;
     m_bmCapture = new CaptureHandler(lay);
+    connect(m_bmCapture, SIGNAL(gotMessage(const QString &)), this, SLOT(slotGotHDMIMessage(const QString &)));
     m_frame_preview = new MyLabel(this);
     connect(m_frame_preview, SIGNAL(seek(bool)), this, SLOT(slotSeekFrame(bool)));
     lay->addWidget(m_frame_preview);
@@ -129,6 +130,11 @@ StopmotionWidget::~StopmotionWidget()
     m_bmCapture->stopPreview();
 }
 
+void StopmotionWidget::slotGotHDMIMessage(const QString &message)
+{
+    log_box->insertItem(0, message);
+}
+
 void StopmotionWidget::parseExistingSequences()
 {
     sequence_name->clear();
index 197693521fb5c58a099379f72638d619c936df53..eab6c9d1e334fbf46e6aed60ea86b3b8d5cfad28 100644 (file)
@@ -143,7 +143,13 @@ private slots:
    *  @param forward set to true for next frame, false for previous one. */
   void slotSeekFrame(bool forward);
 
+  /** @brief Display warning / error message from capture backend. */
+  void slotGotHDMIMessage(const QString &message);
+
+  /** @brief Create thumbnails for existing sequence frames. */
   void slotCreateThumbs(QImage img, int ix);
+
+  /** @brief Prepare thumbnails creation. */
   void slotPrepareThumbs();
 
 signals:
index ebbb457b36d2eea5015d7fd4c6142b373bb12b83..9f4f97e3bad9bdd553fa7977927c9cc4a1763604 100644 (file)
        <item row="1" column="1">
         <widget class="KComboBox" name="hdmi_capturemode"/>
        </item>
+       <item row="2" column="0">
+        <widget class="QLabel" name="label_29">
+         <property name="text">
+          <string>Capture file name</string>
+         </property>
+        </widget>
+       </item>
        <item row="2" column="1">
+        <widget class="QLineEdit" name="kcfg_hdmifilename"/>
+       </item>
+       <item row="4" column="1">
         <spacer name="verticalSpacer_4">
          <property name="orientation">
           <enum>Qt::Vertical</enum>
          </property>
         </spacer>
        </item>
+       <item row="3" column="0" colspan="2">
+        <widget class="QCheckBox" name="kcfg_hdmicaptureaudio">
+         <property name="text">
+          <string>Capture audio</string>
+         </property>
+        </widget>
+       </item>
       </layout>
      </widget>
     </widget>
index 910d2559155c3df287da3dc5b7768f315815eb19..7e9ff137d9e20db70288c5b7a0236480f9975aad 100644 (file)
-<ui version="4.0" >
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
  <class>RecMonitor_UI</class>
- <widget class="QWidget" name="RecMonitor_UI" >
-  <property name="geometry" >
+ <widget class="QWidget" name="RecMonitor_UI">
+  <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>306</width>
-    <height>242</height>
+    <width>293</width>
+    <height>250</height>
    </rect>
   </property>
-  <layout class="QGridLayout" name="gridLayout_2" >
-   <item row="0" column="0" colspan="2" >
-    <widget class="QLabel" name="video_frame" >
-     <property name="text" >
+  <layout class="QGridLayout" name="gridLayout">
+   <property name="margin">
+    <number>0</number>
+   </property>
+   <item row="0" column="0" colspan="3">
+    <widget class="QFrame" name="video_capture">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="frameShape">
+      <enum>QFrame::NoFrame</enum>
+     </property>
+     <property name="frameShadow">
+      <enum>QFrame::Plain</enum>
+     </property>
+     <property name="lineWidth">
+      <number>0</number>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="1">
+    <widget class="QLabel" name="video_frame">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="text">
       <string>Not connected</string>
      </property>
-     <property name="alignment" >
+     <property name="alignment">
       <set>Qt::AlignCenter</set>
      </property>
     </widget>
    </item>
-   <item row="1" column="0" colspan="2" >
-    <widget class="QFrame" name="control_frame_firewire" >
-     <property name="sizePolicy" >
-      <sizepolicy vsizetype="Maximum" hsizetype="Preferred" >
+   <item row="2" column="0" colspan="3">
+    <widget class="QFrame" name="control_frame_firewire">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
        <horstretch>0</horstretch>
        <verstretch>0</verstretch>
       </sizepolicy>
      </property>
-     <property name="minimumSize" >
+     <property name="minimumSize">
       <size>
        <width>0</width>
        <height>15</height>
       </size>
      </property>
-     <property name="frameShape" >
+     <property name="frameShape">
       <enum>QFrame::StyledPanel</enum>
      </property>
-     <property name="frameShadow" >
+     <property name="frameShadow">
       <enum>QFrame::Raised</enum>
      </property>
     </widget>
    </item>
-   <item row="2" column="0" >
-    <widget class="QCheckBox" name="autoaddbox" >
-     <property name="text" >
+   <item row="3" column="0">
+    <widget class="QCheckBox" name="autoaddbox">
+     <property name="text">
       <string>Auto add</string>
      </property>
-     <property name="checked" >
+     <property name="checked">
       <bool>true</bool>
      </property>
     </widget>
    </item>
-   <item row="2" column="1" >
-    <widget class="KComboBox" name="device_selector" >
+   <item row="3" column="2">
+    <widget class="KComboBox" name="device_selector">
      <item>
-      <property name="text" >
+      <property name="text">
        <string>Firewire</string>
       </property>
      </item>
      <item>
-      <property name="text" >
+      <property name="text">
        <string>Video4Linux</string>
       </property>
      </item>
      <item>
-      <property name="text" >
+      <property name="text">
        <string>Screen grab</string>
       </property>
      </item>
+     <item>
+      <property name="text">
+       <string>HDMI</string>
+      </property>
+     </item>
     </widget>
    </item>
   </layout>
index 010b093bb684ee201135719b97adff666617ac1d..4841f1d8b6a82cf46351336f4c7a2204588a31d4 100644 (file)
@@ -6,15 +6,15 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>619</width>
-    <height>434</height>
+    <width>643</width>
+    <height>395</height>
    </rect>
   </property>
   <property name="windowTitle">
    <string>Dialog</string>
   </property>
   <layout class="QGridLayout" name="gridLayout">
-   <item row="0" column="0" colspan="10">
+   <item row="0" column="0" colspan="11">
     <widget class="QSplitter" name="splitter">
      <property name="orientation">
       <enum>Qt::Vertical</enum>
      </property>
     </widget>
    </item>
-   <item row="1" column="8">
+   <item row="1" column="9">
     <widget class="QPushButton" name="button_addsequence">
      <property name="text">
-      <string>Add sequence to project</string>
+      <string>Add to project</string>
      </property>
     </widget>
    </item>
-   <item row="1" column="9">
+   <item row="1" column="10">
     <widget class="QDialogButtonBox" name="buttonBox">
      <property name="sizePolicy">
       <sizepolicy hsizetype="Maximum" vsizetype="Fixed">
      </property>
     </widget>
    </item>
+   <item row="1" column="8">
+    <widget class="KComboBox" name="log_box">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="maxCount">
+      <number>10</number>
+     </property>
+     <property name="frame">
+      <bool>false</bool>
+     </property>
+    </widget>
+   </item>
   </layout>
  </widget>
  <customwidgets>