#FILE(GLOB files "${CMAKE_CURRENT_SOURCE_DIR}/*.svg*")
-kde4_install_icons( ${DATA_INSTALL_DIR}/kdenlive/icons)
+kde4_install_icons( ${DATA_INSTALL_DIR}/kdenlive/icons )
#install( FILES ${files} DESTINATION ${ICON_INSTALL_DIR} )
void frameUpdated(QImage);
/** @brief This signal contains the audio of the current frame. */
- void audioSamplesSignal(QVector<int16_t>, int, int, int);
+ void audioSamplesSignal(const QVector<int16_t>&, const int&, const int&, const int&);
};
class AbstractMonitor : public QWidget
return m_aMonitoringEnabled->isChecked();
}
-void AudioSignal::slotReceiveAudio(const QVector<int16_t>& data, int, int num_channels, int samples){
+void AudioSignal::slotReceiveAudio(const QVector<int16_t>& data, int, int num_channels, int samples)
+{
int num_samples = samples > 200 ? 200 : samples;
file.close();
}
}
+
+ // Add pulseaudio capture option
+ m_configCapture.kcfg_v4l_alsadevice->addItem(i18n("PulseAudio"), "pulse");
+
if (!KdenliveSettings::audiodevicename().isEmpty()) {
// Select correct alsa device
int ix = m_configSdl.kcfg_audio_device->findData(KdenliveSettings::audiodevicename());
connect(m_recMonitor, SIGNAL(addProjectClip(KUrl)), this, SLOT(slotAddProjectClip(KUrl)));
connect(m_recMonitor, SIGNAL(addProjectClipList(KUrl::List)), this, SLOT(slotAddProjectClipList(KUrl::List)));
connect(m_recMonitor, SIGNAL(showConfigDialog(int, int)), this, SLOT(slotPreferences(int, int)));
+
#endif /* ! Q_WS_MAC */
m_monitorManager->initMonitors(m_clipMonitor, m_projectMonitor, m_recMonitor);
void MainWindow::slotUpdateColorScopes()
{
bool request = false;
- kDebug()<<"// UPDATE SCOPES";
for (int i = 0; i < m_gfxScopesList.count(); i++) {
// Check if we need the renderer to send a new frame for update
if (!m_gfxScopesList.at(i)->widget()->visibleRegion().isEmpty() && !(static_cast<AbstractGfxScopeWidget *>(m_gfxScopesList.at(i)->widget())->autoRefreshEnabled())) request = true;
if (request && m_monitorManager->activeRenderer()) {
m_monitorManager->activeRenderer()->sendFrameUpdate();
}
+ if (m_audiosignal->isVisible() && m_recMonitor->abstractRender()) {
+ connect(m_recMonitor->abstractRender(), SIGNAL(audioSamplesSignal(const QVector<int16_t>&, const int&, const int&, const int&)), m_audiosignal, SLOT(slotReceiveAudio(const QVector<int16_t>&, const int&, const int&, const int&)));
+ }
}
void MainWindow::slotClearColorScopes()
}
//TODO: connect record monitor to audio scopes
- /*
+
if (self->analyseAudio) {
self->showAudio(frame);
}
- */
+
}
// So the vector is of size samples*channels.
QVector<int16_t> sampleVector(samples*num_channels);
memcpy(sampleVector.data(), data, samples*num_channels*sizeof(int16_t));
-
if (samples > 0) {
emit audioSamplesSignal(sampleVector, freq, num_channels, samples);
}
*
* Used in Mac OS X. */
void showImageSignal(QImage);
-
- /** @brief This signal contains the audio of the current frame. */
- void audioSamplesSignal(const QVector<int16_t>&, int freq, int num_channels, int num_samples);
void frameSaved(const QString &);
m_manager->activateMonitor("record");
buildMltDevice(path);
profile = ProfilesDialog::getVideoProfile(path);
- producer = QString("avformat-novalidate:video4linux2:%1?width:%2&height:%3&frame_rate:%4").arg(KdenliveSettings::video4vdevice()).arg(profile.width).arg(profile.height).arg((double) profile.frame_rate_num / profile.frame_rate_den);
- if (!m_captureDevice->slotStartPreview(producer)) {
+ producer = getV4lXmlPlaylist(profile);
+
+ //producer = QString("avformat-novalidate:video4linux2:%1?width:%2&height:%3&frame_rate:%4").arg(KdenliveSettings::video4vdevice()).arg(profile.width).arg(profile.height).arg((double) profile.frame_rate_num / profile.frame_rate_den);
+ if (!m_captureDevice->slotStartPreview(producer, true)) {
// v4l capture failed to start
video_frame->setText(i18n("Failed to start Video4Linux,\ncheck your parameters..."));
m_videoBox->setHidden(true);
profile = ProfilesDialog::getVideoProfile(path);
m_videoBox->setRatio((double) profile.display_aspect_num / profile.display_aspect_den);
buildMltDevice(path);
- playlist = QString("<mlt title=\"capture\"><producer id=\"producer0\" in=\"0\" out=\"99999\"><property name=\"mlt_type\">producer</property><property name=\"length\">100000</property><property name=\"eof\">pause</property><property name=\"resource\">video4linux2:%1?width:%2&height:%3&frame_rate:%4</property><property name=\"mlt_service\">avformat-novalidate</property></producer><playlist id=\"playlist0\"><entry producer=\"producer0\" in=\"0\" out=\"99999\"/></playlist>").arg(KdenliveSettings::video4vdevice()).arg(profile.width).arg(profile.height).arg((double) profile.frame_rate_num / profile.frame_rate_den);
+ playlist = getV4lXmlPlaylist(profile);
v4lparameters = KdenliveSettings::v4l_parameters();
// Add alsa audio capture
- if (KdenliveSettings::v4l_captureaudio()) {
- playlist.append(QString("<producer id=\"producer1\" in=\"0\" out=\"99999\"><property name=\"mlt_type\">producer</property><property name=\"length\">100000</property><property name=\"eof\">pause</property><property name=\"resource\">alsa:%5</property><property name=\"audio_index\">0</property><property name=\"video_index\">-1</property><property name=\"mlt_service\">avformat</property></producer><playlist id=\"playlist1\"><entry producer=\"producer1\" in=\"0\" out=\"99999\"/></playlist>").arg(KdenliveSettings::v4l_alsadevicename()));
- }
- else {
+ if (!KdenliveSettings::v4l_captureaudio()) {
// if we do not want audio, make sure that we don't have audio encoding parameters
// this is required otherwise the MLT avformat consumer will not close properly
if (v4lparameters.contains("acodec")) {
v4lparameters = QString(v4lparameters.section("acodec", 0, 0) + "an=1 " + endParam).simplified();
}
}
-
-
- playlist.append("<tractor id=\"tractor0\" title=\"video0\" global_feed=\"1\" in=\"0\" out=\"99999\">");
-
- playlist.append("<track producer=\"playlist0\"/>");
-
- // Audio mix
- if (KdenliveSettings::v4l_captureaudio()) {
- playlist.append("<track producer=\"playlist1\"/>");
- playlist.append("<transition id=\"transition0\" in=\"0\" out=\"0\"><property name=\"a_track\">0</property><property name=\"b_track\">1</property><property name=\"mlt_type\">transition</property><property name=\"mlt_service\">mix</property></transition>");
- }
-
- playlist.append("</tractor></mlt>");
if (m_captureDevice->slotStartCapture(v4lparameters, m_captureFile.path(), playlist, recording_preview->currentIndex())) {
m_videoBox->setHidden(false);
}
}
+const QString RecMonitor::getV4lXmlPlaylist(MltVideoProfile profile) {
+
+ QString playlist = QString("<mlt title=\"capture\"><producer id=\"producer0\" in=\"0\" out=\"99999\"><property name=\"mlt_type\">producer</property><property name=\"length\">100000</property><property name=\"eof\">pause</property><property name=\"resource\">video4linux2:%1?width:%2&height:%3&frame_rate:%4</property><property name=\"mlt_service\">avformat-novalidate</property></producer><playlist id=\"playlist0\"><entry producer=\"producer0\" in=\"0\" out=\"99999\"/></playlist>").arg(KdenliveSettings::video4vdevice()).arg(profile.width).arg(profile.height).arg((double) profile.frame_rate_num / profile.frame_rate_den);
+ playlist.append("<tractor id=\"tractor0\" title=\"video0\" global_feed=\"1\" in=\"0\" out=\"99999\">");
+ playlist.append("<track producer=\"playlist0\"/>");
+
+ if (KdenliveSettings::v4l_captureaudio()) {
+ playlist.append(QString("<producer id=\"producer1\" in=\"0\" out=\"99999\"><property name=\"mlt_type\">producer</property><property name=\"length\">100000</property><property name=\"eof\">pause</property><property name=\"resource\">alsa:%5</property><property name=\"audio_index\">0</property><property name=\"video_index\">-1</property><property name=\"mlt_service\">avformat</property></producer><playlist id=\"playlist1\"><entry producer=\"producer1\" in=\"0\" out=\"99999\"/></playlist>").arg(KdenliveSettings::v4l_alsadevicename()));
+
+ playlist.append("<track producer=\"playlist1\"/>");
+ playlist.append("<transition id=\"transition0\" in=\"0\" out=\"0\"><property name=\"a_track\">0</property><property name=\"b_track\">1</property><property name=\"mlt_type\">transition</property><property name=\"mlt_service\">mix</property></transition>");
+ }
+
+ playlist.append("</tractor></mlt>");
+ return playlist;
+}
+
/*
void RecMonitor::slotStartGrab(const QRect &rect) {
rgnGrab->deleteLater();
#define RECMONITOR_H
#include "abstractmonitor.h"
+#include "definitions.h"
#include "ui_recmonitor_ui.h"
#include <QToolBar>
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(MltVideoProfile profile);
private slots:
void slotStartPreview(bool play = true);