]> git.sesse.net Git - kdenlive/blobdiff - src/recmonitor.cpp
Improve the export audio automatic setting:
[kdenlive] / src / recmonitor.cpp
index a20053e8806bf388a5be793c195d97bd1e1266c6..6542c5fb938074aca591f6435a411555e3fef9e7 100644 (file)
@@ -132,9 +132,9 @@ RecMonitor::RecMonitor(QString name, QWidget *parent) :
 
     if (KdenliveSettings::video4capture().isEmpty()) {
         QString captureCommand;
-        if (!KdenliveSettings::video4adevice().isEmpty()) captureCommand = "-f " + KdenliveSettings::video4aformat() + " -i " + KdenliveSettings::video4adevice();
+        if (!KdenliveSettings::video4adevice().isEmpty()) captureCommand = "-f " + KdenliveSettings::video4aformat() + " -i " + KdenliveSettings::video4adevice() + " -acodec " + KdenliveSettings::video4acodec();
 
-        captureCommand +=  " -f " + KdenliveSettings::video4vformat() + " -s " + KdenliveSettings::video4size() + " -r " + QString::number(KdenliveSettings::video4rate()) + " -i " + KdenliveSettings::video4vdevice();
+        captureCommand +=  " -f " + KdenliveSettings::video4vformat() + " -s " + KdenliveSettings::video4size() + " -r " + QString::number(KdenliveSettings::video4rate()) + " -i " + KdenliveSettings::video4vdevice() + " -vcodec " + KdenliveSettings::video4vcodec();;
         KdenliveSettings::setVideo4capture(captureCommand);
     }
 
@@ -315,10 +315,6 @@ void RecMonitor::slotStopCapture()
         m_isPlaying = false;
         break;
     case VIDEO4LINUX:
-        m_captureProcess->write("q\n", 3);
-        QTimer::singleShot(1000, m_captureProcess, SLOT(kill()));
-
-        break;
     case SCREENGRAB:
         m_captureProcess->write("q\n", 3);
         QTimer::singleShot(1000, m_captureProcess, SLOT(kill()));
@@ -372,7 +368,7 @@ void RecMonitor::slotStartCapture(bool play)
         case 3:
             // HDV CAPTURE
             m_captureArgs << "--format" << "hdv";
-            m_displayArgs << "-f" << "mpegts";
+            m_displayArgs << "-f" << KdenliveSettings::video4container();
             break;
         }
         if (KdenliveSettings::firewireautosplit()) m_captureArgs << "--autosplit";
@@ -395,8 +391,8 @@ void RecMonitor::slotStartCapture(bool play)
         m_discAction->setEnabled(true);
         break;
     case VIDEO4LINUX:
-        m_captureArgs << KdenliveSettings::video4capture().simplified().split(' ') << KdenliveSettings::video4encoding().simplified().split(' ') << "-f" << "mpegts" << "-vcodec" << "mpeg4" << "-acodec" << "mp2" << "-";
-        m_displayArgs << "-f" << "mpegts" << "-x" << QString::number(video_frame->width()) << "-y" << QString::number(video_frame->height()) << "-";
+        m_captureArgs << KdenliveSettings::video4capture().simplified().split(' ') << KdenliveSettings::video4encoding().simplified().split(' ') << "-f" << KdenliveSettings::video4container() << "-";
+        m_displayArgs << "-f" << KdenliveSettings::video4container() << "-x" << QString::number(video_frame->width()) << "-y" << QString::number(video_frame->height()) << "-";
         m_captureProcess->setStandardOutputProcess(m_displayProcess);
         kDebug() << "Capture: Running ffmpeg " << m_captureArgs.join(" ");
         m_captureProcess->start("ffmpeg", m_captureArgs);
@@ -456,6 +452,7 @@ void RecMonitor::slotRecord()
         m_recAction->setChecked(true);
         QString extension = "mp4";
         if (device_selector->currentIndex() == SCREENGRAB) extension = "ogv"; //KdenliveSettings::screengrabextension();
+        else if (device_selector->currentIndex() == VIDEO4LINUX) extension = KdenliveSettings::video4extension();
         QString path = KdenliveSettings::capturefolder() + "/capture0000." + extension;
         int i = 1;
         while (QFile::exists(path)) {
@@ -473,8 +470,8 @@ void RecMonitor::slotRecord()
 
         switch (device_selector->currentIndex()) {
         case VIDEO4LINUX:
-            m_captureArgs << KdenliveSettings::video4capture().simplified().split(' ') << KdenliveSettings::video4encoding().simplified().split(' ') << "-vcodec" << "mpeg4" << "-acodec" << "mp2" << "-y" << m_captureFile.path() << "-f" << "mpegts" << "-vcodec" << "mpeg4" << "-acodec" << "mp2" << "-";
-            m_displayArgs << "-f" << "mpegts" << "-x" << QString::number(video_frame->width()) << "-y" << QString::number(video_frame->height()) << "-";
+            m_captureArgs << KdenliveSettings::video4capture().simplified().split(' ') << KdenliveSettings::video4encoding().simplified().split(' ') << "-y" << m_captureFile.path() << "-f" << KdenliveSettings::video4container() << "-acodec" << KdenliveSettings::video4acodec() << "-vcodec" << KdenliveSettings::video4vcodec() << "-";
+            m_displayArgs << "-f" << KdenliveSettings::video4container() << "-x" << QString::number(video_frame->width()) << "-y" << QString::number(video_frame->height()) << "-";
             m_captureProcess->setStandardOutputProcess(m_displayProcess);
             kDebug() << "Capture: Running ffmpeg " << m_captureArgs.join(" ");
             m_captureProcess->start("ffmpeg", m_captureArgs);
@@ -486,7 +483,7 @@ void RecMonitor::slotRecord()
                 break;
             default:
                 // Region capture
-                m_captureArgs << "-width" << QString::number(KdenliveSettings::rmd_width()) << "-height" << QString::number(KdenliveSettings::rmd_height());
+                m_captureArgs << "--width" << QString::number(KdenliveSettings::rmd_width()) << "--height" << QString::number(KdenliveSettings::rmd_height());
                 if (!KdenliveSettings::rmd_follow_mouse()) {
                     m_captureArgs << "-x" << QString::number(KdenliveSettings::rmd_offsetx()) << "-y" << QString::number(KdenliveSettings::rmd_offsety());
                 } else {
@@ -498,25 +495,29 @@ void RecMonitor::slotRecord()
             if (KdenliveSettings::rmd_hide_mouse()) m_captureArgs << "--no-cursor";
             m_isCapturing = true;
             if (KdenliveSettings::rmd_capture_audio()) {
-                m_captureArgs << "-freq" << KdenliveSettings::rmd_freq();
-                m_captureArgs << "-channels" << QString::number(KdenliveSettings::rmd_audio_channels());
+                m_captureArgs << "--freq" << KdenliveSettings::rmd_freq();
+                m_captureArgs << "--channels" << QString::number(KdenliveSettings::rmd_audio_channels());
                 if (KdenliveSettings::rmd_use_jack()) {
-                    m_captureArgs << "-use-jack" << KdenliveSettings::rmd_jackports();
+                    m_captureArgs << "--use-jack";
+                    QStringList ports = KdenliveSettings::rmd_jackports().split(" ", QString::SkipEmptyParts);
+                    for (int i = 0; i < ports.count(); ++i) {
+                        m_captureArgs << ports.at(i);
+                    }
                     if (KdenliveSettings::rmd_jack_buffer() > 0.0)
-                        m_captureArgs << "-ring-buffer-size" << QString::number(KdenliveSettings::rmd_jack_buffer());
+                        m_captureArgs << "--ring-buffer-size" << QString::number(KdenliveSettings::rmd_jack_buffer());
                 } else {
                     if (!KdenliveSettings::rmd_alsadevicename().isEmpty())
-                        m_captureArgs << "-device" << KdenliveSettings::rmd_alsadevicename();
+                        m_captureArgs << "--device" << KdenliveSettings::rmd_alsadevicename();
                     if (KdenliveSettings::rmd_alsa_buffer() > 0)
-                        m_captureArgs << "-buffer-size" << QString::number(KdenliveSettings::rmd_alsa_buffer());
+                        m_captureArgs << "--buffer-size" << QString::number(KdenliveSettings::rmd_alsa_buffer());
                 }
             } else m_captureArgs << "--no-sound";
 
             if (KdenliveSettings::rmd_fullshots()) m_captureArgs << "--full-shots";
             m_captureArgs << "--v_bitrate" << QString::number(KdenliveSettings::rmd_bitrate());
             m_captureArgs << "--v_quality" << QString::number(KdenliveSettings::rmd_quality());
-            m_captureArgs << "-workdir" << KdenliveSettings::currenttmpfolder();
-            m_captureArgs << "-fps" << QString::number(KdenliveSettings::rmd_fps()) << "-o" << m_captureFile.path();
+            m_captureArgs << "--workdir" << KdenliveSettings::currenttmpfolder();
+            m_captureArgs << "--fps" << QString::number(KdenliveSettings::rmd_fps()) << "-o" << m_captureFile.path();
             m_captureProcess->start(KdenliveSettings::rmd_path(), m_captureArgs);
             kDebug() << "// RecordMyDesktop params: " << m_captureArgs;
             break;
@@ -590,8 +591,15 @@ void RecMonitor::slotProcessStatus(QProcess::ProcessState status)
         if (m_captureProcess && m_captureProcess->exitStatus() == QProcess::CrashExit) {
             video_frame->setText(i18n("Capture crashed, please check your parameters"));
         } else {
-            if (device_selector->currentIndex() != SCREENGRAB) video_frame->setText(i18n("Not connected"));
-            else video_frame->setPixmap(mergeSideBySide(KIcon("video-display").pixmap(QSize(50, 50)), i18n("Press record button\nto start screen capture\nFiles will be saved in:\n%1", KdenliveSettings::capturefolder())));
+            if (device_selector->currentIndex() != SCREENGRAB) {
+                video_frame->setText(i18n("Not connected"));
+            } else {
+                if (m_captureProcess->exitCode() != 0) {
+                    video_frame->setText(i18n("Capture crashed, please check your parameters\nRecordMyDesktop exit code: %1", QString::number(m_captureProcess->exitCode())));
+                } else {
+                    video_frame->setPixmap(mergeSideBySide(KIcon("video-display").pixmap(QSize(50, 50)), i18n("Press record button\nto start screen capture\nFiles will be saved in:\n%1", KdenliveSettings::capturefolder())));
+                }
+            }
         }
         m_isCapturing = false;