From: <j-...@us...> - 2008-10-26 15:46:59
|
Revision: 2570 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=2570&view=rev Author: j-b-m Date: 2008-10-26 15:46:54 +0000 (Sun, 26 Oct 2008) Log Message: ----------- Allow audio capture through alsa for screen grabs. Should fix issue: http://www.kdenlive.org:80/mantis/view.php?id=248 Modified Paths: -------------- branches/KDE4/src/kdenlivesettings.kcfg branches/KDE4/src/kdenlivesettingsdialog.cpp branches/KDE4/src/recmonitor.cpp branches/KDE4/src/recmonitor.h branches/KDE4/src/widgets/configcapture_ui.ui Modified: branches/KDE4/src/kdenlivesettings.kcfg =================================================================== --- branches/KDE4/src/kdenlivesettings.kcfg 2008-10-26 14:56:07 UTC (rev 2569) +++ branches/KDE4/src/kdenlivesettings.kcfg 2008-10-26 15:46:54 UTC (rev 2570) @@ -208,19 +208,34 @@ <default>false</default> </entry> - <entry name="screengrabaudiocapture" type="String"> + <entry name="useosscapture" type="Bool"> + <label>use ffmpeg oss audio capture instead of external program.</label> + <default>false</default> + </entry> + + <entry name="screengrabosscapture" type="String"> <label>ffmpeg arguments for x11 grab capture.</label> <default>-f oss -i /dev/dsp</default> </entry> + <entry name="screengrabalsacapture" type="String"> + <label>external program audio capture piped into ffmpeg.</label> + <default>arecord -Dplughw:0 -c1 -q -r41000 -traw -fS16_LE -</default> + </entry> + + <entry name="screengrabalsacapture2" type="String"> + <label>external program audio capture piped into ffmpeg.</label> + <default>-f s16le -i - -acodec copy</default> + </entry> + <entry name="screengrabcapture" type="String"> <label>ffmpeg arguments for x11 grab capture.</label> - <default>-f x11grab -r 15 -s %size -i :0.0%offset</default> + <default>-f x11grab -r 10 -s %size -i :0.0%offset</default> </entry> <entry name="screengrabencoding" type="String"> <label>ffmpeg arguments for x11 capture encoding.</label> - <default>-vcodec mpeg4</default> + <default>-pix_fmt yuv422p -vcodec huffyuv</default> </entry> <entry name="screengrabextension" type="String"> Modified: branches/KDE4/src/kdenlivesettingsdialog.cpp =================================================================== --- branches/KDE4/src/kdenlivesettingsdialog.cpp 2008-10-26 14:56:07 UTC (rev 2569) +++ branches/KDE4/src/kdenlivesettingsdialog.cpp 2008-10-26 15:46:54 UTC (rev 2570) @@ -98,6 +98,10 @@ connect(m_configCapture.kcfg_video4size, SIGNAL(editingFinished()), this, SLOT(rebuildVideo4Commands())); connect(m_configCapture.kcfg_video4rate, SIGNAL(editingFinished()), this, SLOT(rebuildVideo4Commands())); + connect(m_configCapture.kcfg_screengrabenableaudio, SIGNAL(clicked(bool)), m_configCapture.audio_group, SLOT(setVisible(bool))); + + m_configCapture.audio_group->setVisible(KdenliveSettings::screengrabenableaudio()); + connect(m_configEnv.kp_image, SIGNAL(clicked()), this, SLOT(slotEditImageApplication())); connect(m_configEnv.kp_audio, SIGNAL(clicked()), this, SLOT(slotEditAudioApplication())); connect(m_configEnv.kp_player, SIGNAL(clicked()), this, SLOT(slotEditVideoApplication())); Modified: branches/KDE4/src/recmonitor.cpp =================================================================== --- branches/KDE4/src/recmonitor.cpp 2008-10-26 14:56:07 UTC (rev 2569) +++ branches/KDE4/src/recmonitor.cpp 2008-10-26 15:46:54 UTC (rev 2570) @@ -85,6 +85,7 @@ slotVideoDeviceChanged(ui.device_selector->currentIndex()); displayProcess = new QProcess; captureProcess = new QProcess; + alsaProcess = new QProcess; connect(captureProcess, SIGNAL(stateChanged(QProcess::ProcessState)), this, SLOT(slotProcessStatus(QProcess::ProcessState))); @@ -118,6 +119,12 @@ kDebug() << "/////// BUILDING MONITOR, ID: " << ui.video_frame->winId(); } +RecMonitor::~RecMonitor() { + delete captureProcess; + delete displayProcess; + delete alsaProcess; +} + QString RecMonitor::name() const { return m_name; } @@ -364,12 +371,16 @@ m_recAction->setChecked(false); break; case VIDEO4LINUX: + captureProcess->terminate(); slotStopCapture(); //m_isCapturing = false; QTimer::singleShot(1000, this, SLOT(slotStartCapture())); break; case SCREENGRAB: captureProcess->write("q\n", 3); + captureProcess->terminate(); + alsaProcess->terminate(); + alsaProcess->kill(); // in case ffmpeg doesn't exit with the 'q' command, kill it one second later QTimer::singleShot(1000, captureProcess, SLOT(kill())); break; @@ -416,14 +427,20 @@ if (KdenliveSettings::fullscreengrab()) { const QRect rect = QApplication::desktop()->screenGeometry(); args = KdenliveSettings::screengrabcapture().replace("%size", QString::number(rect.width()) + "x" + QString::number(rect.height())).replace("%offset", QString()); - kDebug() << "// capture params: " << args; if (KdenliveSettings::screengrabenableaudio()) { // also capture audio - m_captureArgs << KdenliveSettings::screengrabaudiocapture().simplified().split(' '); + if (KdenliveSettings::useosscapture()) m_captureArgs << KdenliveSettings::screengrabosscapture().simplified().split(' '); + else m_captureArgs << KdenliveSettings::screengrabalsacapture2().simplified().split(' '); } m_captureArgs << args.simplified().split(' ') << KdenliveSettings::screengrabencoding().simplified().split(' ') << m_captureFile.path(); ui.video_frame->setText(i18n("Capturing...")); m_isCapturing = true; + if (KdenliveSettings::screengrabenableaudio() && !KdenliveSettings::useosscapture()) { + QStringList alsaArgs = KdenliveSettings::screengrabalsacapture().simplified().split(' '); + alsaProcess->setStandardOutputProcess(captureProcess); + const QString alsaBinary = alsaArgs.takeFirst(); + alsaProcess->start(alsaBinary, alsaArgs); + } captureProcess->start("ffmpeg", m_captureArgs); } else { ui.video_frame->setText(i18n("Select region...")); @@ -445,6 +462,7 @@ // stop capture displayProcess->kill(); captureProcess->kill(); + alsaProcess->kill(); QTimer::singleShot(1000, this, SLOT(slotRecord())); } } @@ -459,14 +477,19 @@ if (width % 2 != 0) width--; if (height % 2 != 0) height--; QString args = KdenliveSettings::screengrabcapture().replace("%size", QString::number(width) + "x" + QString::number(height)).replace("%offset", "+" + QString::number(rect.x()) + "," + QString::number(rect.y())); - kDebug() << "// capture params: " << args; if (KdenliveSettings::screengrabenableaudio()) { // also capture audio - m_captureArgs << KdenliveSettings::screengrabaudiocapture().simplified().split(' '); + if (KdenliveSettings::useosscapture()) m_captureArgs << KdenliveSettings::screengrabosscapture().simplified().split(' '); + else m_captureArgs << KdenliveSettings::screengrabalsacapture2().simplified().split(' '); } m_captureArgs << args.simplified().split(' ') << KdenliveSettings::screengrabencoding().simplified().split(' ') << m_captureFile.path(); m_isCapturing = true; ui.video_frame->setText(i18n("Capturing...")); + if (KdenliveSettings::screengrabenableaudio() && !KdenliveSettings::useosscapture()) { + QStringList alsaArgs = KdenliveSettings::screengrabalsacapture().simplified().split(' '); + alsaProcess->setStandardOutputProcess(captureProcess); + alsaProcess->start(alsaArgs.takeFirst(), alsaArgs); + } captureProcess->start("ffmpeg", m_captureArgs); } Modified: branches/KDE4/src/recmonitor.h =================================================================== --- branches/KDE4/src/recmonitor.h 2008-10-26 14:56:07 UTC (rev 2569) +++ branches/KDE4/src/recmonitor.h 2008-10-26 15:46:54 UTC (rev 2570) @@ -40,6 +40,8 @@ public: RecMonitor(QString name, QWidget *parent = 0); + virtual ~RecMonitor(); + QString name() const; enum CAPTUREDEVICE {FIREWIRE = 0, VIDEO4LINUX = 1, SCREENGRAB = 2}; @@ -61,6 +63,7 @@ QProcess *captureProcess; QProcess *displayProcess; + QProcess *alsaProcess; QTimer *m_initTimer; bool m_isCapturing; /** did the user capture something ? */ Modified: branches/KDE4/src/widgets/configcapture_ui.ui =================================================================== --- branches/KDE4/src/widgets/configcapture_ui.ui 2008-10-26 14:56:07 UTC (rev 2569) +++ branches/KDE4/src/widgets/configcapture_ui.ui 2008-10-26 15:46:54 UTC (rev 2570) @@ -5,8 +5,8 @@ <rect> <x>0</x> <y>0</y> - <width>446</width> - <height>312</height> + <width>409</width> + <height>311</height> </rect> </property> <layout class="QGridLayout" name="gridLayout_3" > @@ -45,7 +45,7 @@ </size> </property> <property name="currentIndex" > - <number>0</number> + <number>2</number> </property> <widget class="QWidget" name="tab" > <attribute name="title" > @@ -354,28 +354,63 @@ <attribute name="title" > <string>Screen Grab / FFmpeg</string> </attribute> - <layout class="QGridLayout" name="gridLayout_4" > - <item row="0" column="0" > + <layout class="QGridLayout" name="gridLayout_5" > + <item row="0" column="0" colspan="2" > <widget class="QCheckBox" name="kcfg_screengrabenableaudio" > <property name="text" > <string>Capture audio</string> </property> </widget> </item> - <item row="0" column="2" > - <widget class="KLineEdit" name="kcfg_screengrabaudiocapture" /> + <item row="1" column="0" colspan="3" > + <widget class="QFrame" name="audio_group" > + <property name="frameShape" > + <enum>QFrame::StyledPanel</enum> + </property> + <property name="frameShadow" > + <enum>QFrame::Raised</enum> + </property> + <layout class="QGridLayout" name="gridLayout_4" > + <item row="0" column="0" > + <widget class="QRadioButton" name="radioButton_2" > + <property name="text" > + <string>ALSA</string> + </property> + <property name="checked" > + <bool>true</bool> + </property> + </widget> + </item> + <item row="0" column="1" > + <widget class="KLineEdit" name="kcfg_screengrabalsacapture" /> + </item> + <item row="0" column="2" > + <widget class="KLineEdit" name="kcfg_screengrabalsacapture2" /> + </item> + <item row="1" column="0" > + <widget class="QRadioButton" name="kcfg_useosscapture" > + <property name="text" > + <string>OSS</string> + </property> + </widget> + </item> + <item row="1" column="1" colspan="2" > + <widget class="KLineEdit" name="kcfg_screengrabosscapture" /> + </item> + </layout> + </widget> </item> - <item row="1" column="0" colspan="2" > + <item row="2" column="0" colspan="2" > <widget class="QLabel" name="label_17" > <property name="text" > <string>Video capture params</string> </property> </widget> </item> - <item row="1" column="2" > + <item row="2" column="2" > <widget class="KLineEdit" name="kcfg_screengrabcapture" /> </item> - <item row="2" column="0" > + <item row="3" column="0" colspan="2" > <widget class="QLabel" name="label_8" > <property name="sizePolicy" > <sizepolicy vsizetype="Preferred" hsizetype="Maximum" > @@ -388,7 +423,7 @@ </property> </widget> </item> - <item row="2" column="2" > + <item row="3" column="2" > <widget class="KLineEdit" name="kcfg_screengrabencoding" > <property name="sizePolicy" > <sizepolicy vsizetype="Fixed" hsizetype="MinimumExpanding" > @@ -401,7 +436,7 @@ </property> </widget> </item> - <item row="3" column="0" > + <item row="4" column="0" > <widget class="QLabel" name="label_10" > <property name="sizePolicy" > <sizepolicy vsizetype="Preferred" hsizetype="Maximum" > @@ -414,7 +449,7 @@ </property> </widget> </item> - <item row="3" column="2" > + <item row="4" column="2" > <widget class="KLineEdit" name="kcfg_screengrabextension" > <property name="sizePolicy" > <sizepolicy vsizetype="Fixed" hsizetype="MinimumExpanding" > @@ -427,14 +462,14 @@ </property> </widget> </item> - <item row="4" column="0" colspan="3" > + <item row="5" column="0" colspan="3" > <widget class="QCheckBox" name="kcfg_fullscreengrab" > <property name="text" > <string>Full screen capture</string> </property> </widget> </item> - <item row="5" column="1" colspan="2" > + <item row="6" column="1" colspan="2" > <spacer name="verticalSpacer_3" > <property name="orientation" > <enum>Qt::Vertical</enum> @@ -452,6 +487,9 @@ </widget> </item> </layout> + <zorder>label</zorder> + <zorder>kcfg_defaultcapture</zorder> + <zorder>tabWidget</zorder> </widget> <customwidgets> <customwidget> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |