#include "kdenlivesettingsdialog.h"
#include "profilesdialog.h"
+#ifdef USE_V4L
#include "v4l/v4lcapture.h"
+#endif
#include "blackmagic/devices.h"
+#include "encodingprofilesdialog.h"
#include "kdenlivesettings.h"
#include <KStandardDirs>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
-#ifndef NO_JOGSHUTTLE
+#ifdef USE_JOGSHUTTLE
#include "jogaction.h"
#include "jogshuttleconfig.h"
#include <linux/input.h>
-#endif /* NO_JOGSHUTTLE */
+#endif
KdenliveSettingsDialog::KdenliveSettingsDialog(const QMap<QString, QString>& mappable_actions, QWidget * parent) :
// Hide multi tab option until Kdenlive really supports it
m_configMisc.kcfg_activatetabs->setVisible(false);
+ // Hide avformat-novalidate trick, causes crash (bug #2205 and #2206)
+ m_configMisc.kcfg_projectloading_avformatnovalidate->setVisible(false);
QWidget *p8 = new QWidget;
m_configProject.setupUi(p8);
m_configProject.kcfg_proxyminsize->setEnabled(KdenliveSettings::generateproxy());
connect(m_configProject.kcfg_generateimageproxy, SIGNAL(toggled(bool)), m_configProject.kcfg_proxyimageminsize, SLOT(setEnabled(bool)));
m_configProject.kcfg_proxyimageminsize->setEnabled(KdenliveSettings::generateimageproxy());
- m_configProject.kcfg_proxyparams->setMaximumHeight(QFontMetrics(font()).lineSpacing() * 5);
QWidget *p3 = new QWidget;
m_configTimeline.setupUi(p3);
m_configEnv.mltpathurl->setMode(KFile::Directory);
m_configEnv.mltpathurl->lineEdit()->setObjectName("kcfg_mltpath");
m_configEnv.rendererpathurl->lineEdit()->setObjectName("kcfg_rendererpath");
- m_configEnv.kcfg_mltthreads->setMaximum(QThread::idealThreadCount());
+ m_configEnv.kcfg_mltthreads->setMaximum( QThread::idealThreadCount() < 4 ? QThread::idealThreadCount() : 3 );
m_configEnv.tmppathurl->setMode(KFile::Directory);
m_configEnv.tmppathurl->lineEdit()->setObjectName("kcfg_currenttmpfolder");
m_configEnv.projecturl->setMode(KFile::Directory);
QWidget *p4 = new QWidget;
m_configCapture.setupUi(p4);
-#if !defined(Q_WS_MAC) && !defined(Q_OS_FREEBSD)
- m_configCapture.kcfg_v4l_parameters->setMaximumHeight(QFontMetrics(font()).lineSpacing() * 4);
+#ifdef USE_V4L
// Video 4 Linux device detection
for (int i = 0; i < 10; i++) {
connect(m_configCapture.kcfg_detectedv4ldevices, SIGNAL(currentIndexChanged(int)), this, SLOT(slotUpdatev4lDevice()));
connect(m_configCapture.kcfg_v4l_format, SIGNAL(currentIndexChanged(int)), this, SLOT(slotUpdatev4lCaptureProfile()));
connect(m_configCapture.kcfg_v4l_captureaudio, SIGNAL(toggled(bool)), m_configCapture.kcfg_v4l_alsadevice, SLOT(setEnabled(bool)));
+ connect(m_configCapture.config_v4l, SIGNAL(clicked()), this, SLOT(slotEditVideo4LinuxProfile()));
slotUpdatev4lDevice();
#endif
m_page4 = addPage(p4, i18n("Capture"), "media-record");
m_configCapture.tabWidget->setCurrentIndex(KdenliveSettings::defaultcapture());
-#ifdef Q_WS_MAC
+#ifndef USE_V4L
m_configCapture.tabWidget->setEnabled(false);
m_configCapture.kcfg_defaultcapture->setEnabled(false);
- m_configCapture.label->setText(i18n("Capture is not yet available on OS X."));
+ m_configCapture.label->setText(i18n("Capture is not yet available on this platform."));
#endif
QWidget *p5 = new QWidget;
m_configShuttle.setupUi(p5);
-#ifdef NO_JOGSHUTTLE
- m_configShuttle.kcfg_enableshuttle->hide();
- m_configShuttle.kcfg_enableshuttle->setDisabled(true);
-#else
+#ifdef USE_JOGSHUTTLE
connect(m_configShuttle.kcfg_enableshuttle, SIGNAL(stateChanged(int)), this, SLOT(slotCheckShuttle(int)));
connect(m_configShuttle.shuttledevicelist, SIGNAL(activated(int)), this, SLOT(slotUpdateShuttleDevice(int)));
slotCheckShuttle(KdenliveSettings::enableshuttle());
if (i < actions_map.size())
button->setCurrentIndex(action_pos[actions_map[i]]);
}
-#endif /* NO_JOGSHUTTLE */
+#else /* ! USE_JOGSHUTTLE */
+ m_configShuttle.kcfg_enableshuttle->hide();
+ m_configShuttle.kcfg_enableshuttle->setDisabled(true);
+#endif /* USE_JOGSHUTTLE */
m_page5 = addPage(p5, i18n("JogShuttle"), "input-mouse");
QWidget *p6 = new QWidget;
m_configSdl.setupUi(p6);
-#if not defined(Q_WS_MAC) && not defined(USE_OPEN_GL)
+#ifndef USE_OPENGL
m_configSdl.kcfg_openglmonitors->setHidden(true);
#endif
connect(m_configTranscode.button_add, SIGNAL(clicked()), this, SLOT(slotAddTranscode()));
connect(m_configTranscode.button_delete, SIGNAL(clicked()), this, SLOT(slotDeleteTranscode()));
connect(m_configTranscode.profiles_list, SIGNAL(itemChanged(QTreeWidgetItem *, int)), this, SLOT(slotDialogModified()));
-
+
connect(m_configCapture.kcfg_rmd_capture_audio, SIGNAL(clicked(bool)), m_configCapture.audio_group, SLOT(setVisible(bool)));
m_configCapture.audio_group->setVisible(KdenliveSettings::rmd_capture_audio());
connect(m_configEnv.kp_audio, SIGNAL(clicked()), this, SLOT(slotEditAudioApplication()));
connect(m_configEnv.kp_player, SIGNAL(clicked()), this, SLOT(slotEditVideoApplication()));
+ loadEncodingProfiles();
checkProfile();
slotUpdateDisplay();
KdenliveSettings::setDvgrab_path(dvgrabpath);
}
-
- BMInterface::getBlackMagicDeviceList(m_configCapture.kcfg_hdmi_capturedevice, m_configCapture.kcfg_hdmi_capturemode);
- connect(m_configCapture.kcfg_hdmi_capturedevice, SIGNAL(currentIndexChanged(int)), this, SLOT(slotUpdateHDMIModes()));
+ // decklink profile
+ m_configCapture.decklink_showprofileinfo->setIcon(KIcon("help-about"));
+ m_configCapture.decklink_manageprofile->setIcon(KIcon("configure"));
+ m_configCapture.decklink_parameters->setVisible(false);
+ m_configCapture.decklink_parameters->setMaximumHeight(QFontMetrics(font()).lineSpacing() * 4);
+ m_configCapture.decklink_parameters->setPlainText(KdenliveSettings::decklink_parameters());
+ connect(m_configCapture.decklink_manageprofile, SIGNAL(clicked(bool)), this, SLOT(slotManageEncodingProfile()));
+ connect(m_configCapture.kcfg_decklink_profile, SIGNAL(currentIndexChanged(int)), this, SLOT(slotUpdateDecklinkProfile()));
+ connect(m_configCapture.decklink_showprofileinfo, SIGNAL(clicked(bool)), m_configCapture.decklink_parameters, SLOT(setVisible(bool)));
+
+ // v4l profile
+ m_configCapture.v4l_showprofileinfo->setIcon(KIcon("help-about"));
+ m_configCapture.v4l_manageprofile->setIcon(KIcon("configure"));
+ m_configCapture.v4l_parameters->setVisible(false);
+ m_configCapture.v4l_parameters->setMaximumHeight(QFontMetrics(font()).lineSpacing() * 4);
+ m_configCapture.v4l_parameters->setPlainText(KdenliveSettings::v4l_parameters());
+ connect(m_configCapture.v4l_manageprofile, SIGNAL(clicked(bool)), this, SLOT(slotManageEncodingProfile()));
+ connect(m_configCapture.kcfg_v4l_profile, SIGNAL(currentIndexChanged(int)), this, SLOT(slotUpdateV4lProfile()));
+ connect(m_configCapture.v4l_showprofileinfo, SIGNAL(clicked(bool)), m_configCapture.v4l_parameters, SLOT(setVisible(bool)));
+
+ // proxy profile stuff
+ m_configProject.proxy_showprofileinfo->setIcon(KIcon("help-about"));
+ m_configProject.proxy_manageprofile->setIcon(KIcon("configure"));
+ m_configProject.proxyparams->setVisible(false);
+ m_configProject.proxyparams->setMaximumHeight(QFontMetrics(font()).lineSpacing() * 4);
+ m_configProject.proxyparams->setPlainText(KdenliveSettings::proxyparams());
+ connect(m_configProject.proxy_manageprofile, SIGNAL(clicked(bool)), this, SLOT(slotManageEncodingProfile()));
+ connect(m_configProject.proxy_showprofileinfo, SIGNAL(clicked(bool)), m_configProject.proxyparams, SLOT(setVisible(bool)));
+ connect(m_configProject.kcfg_proxy_profile, SIGNAL(currentIndexChanged(int)), this, SLOT(slotUpdateProxyProfile()));
+
+
+ slotUpdateProxyProfile(-1);
+ slotUpdateV4lProfile(-1);
+ slotUpdateDecklinkProfile(-1);
+
+ BMInterface::getBlackMagicDeviceList(m_configCapture.kcfg_decklink_capturedevice);
+ if (m_configCapture.kcfg_decklink_capturedevice->count() > 0) {
+ QStringList modes = m_configCapture.kcfg_decklink_capturedevice->itemData(m_configCapture.kcfg_decklink_capturedevice->currentIndex()).toStringList();
+ m_configCapture.kcfg_decklink_capturedevice->setToolTip(i18n("Supported capture modes:\n") + modes.join("\n"));
+ }
+ connect(m_configCapture.kcfg_decklink_capturedevice, SIGNAL(currentIndexChanged(int)), this, SLOT(slotUpdateHDMIModes()));
if (BMInterface::getBlackMagicOutputDeviceList(m_configSdl.kcfg_blackmagic_output_device)) {
// Found blackmagic card
void KdenliveSettingsDialog::slotUpdateHDMIModes()
{
- QStringList modes = m_configCapture.kcfg_hdmi_capturedevice->itemData(m_configCapture.kcfg_hdmi_capturedevice->currentIndex()).toStringList();
- m_configCapture.kcfg_hdmi_capturemode->clear();
- m_configCapture.kcfg_hdmi_capturemode->insertItems(0, modes);
+ QStringList modes = m_configCapture.kcfg_decklink_capturedevice->itemData(m_configCapture.kcfg_decklink_capturedevice->currentIndex()).toStringList();
+ m_configCapture.kcfg_decklink_capturedevice->setToolTip(i18n("Supported capture modes:\n") + modes.join("\n"));
}
void KdenliveSettingsDialog::slotUpdateRmdRegionStatus()
m_configSdl.kcfg_audio_device->setCurrentIndex(ix);
KdenliveSettings::setAudio_device(ix);
}
-
+
if (!KdenliveSettings::rmd_alsadevicename().isEmpty()) {
// Select correct alsa device
int ix = m_configCapture.kcfg_rmd_alsa_device->findData(KdenliveSettings::rmd_alsadevicename());
kDebug() << result;
QStringList lines = result.split('\n');
foreach(const QString & data, lines) {
- kDebug() << "// READING LINE: " << data;
- if (data.simplified().startsWith("card")) {
+ //kDebug() << "// READING LINE: " << data;
+ if (!data.startsWith(" ") && data.count(':') > 1) {
QString card = data.section(':', 0, 0).section(' ', -1);
QString device = data.section(':', 1, 1).section(' ', -1);
m_configSdl.kcfg_audio_device->addItem(data.section(':', -1), "plughw:" + card + ',' + device);
m_configEnv.kcfg_defaultimageapp->setText(service->exec());
}
-#ifndef NO_JOGSHUTTLE
+#ifdef USE_JOGSHUTTLE
void KdenliveSettingsDialog::slotCheckShuttle(int state)
{
m_configShuttle.config_group->setEnabled(state);
m_configShuttle.kcfg_shuttledevice->setText(device);
}
-#endif /* NO_JOGSHUTTLE */
+#endif /* USE_JOGSHUTTLE */
void KdenliveSettingsDialog::updateWidgets()
{
// Revert widgets to last saved state (for example when user pressed "Cancel")
// kDebug() << "// // // KCONFIG Revert called";
-#ifndef NO_JOGSHUTTLE
+#ifdef USE_JOGSHUTTLE
// revert jog shuttle device
if (m_configShuttle.shuttledevicelist->count() > 0) {
for (int i = 0; i < m_configShuttle.shuttledevicelist->count(); i++) {
if (i < actions_map.size())
button->setCurrentIndex(action_pos[actions_map[i]]);
}
-#endif
+#endif /* USE_JOGSHUTTLE */
}
void KdenliveSettingsDialog::updateSettings()
bool resetProfile = false;
bool updateCapturePath = false;
-
+
/*if (m_configShuttle.shuttledevicelist->count() > 0) {
QString device = m_configShuttle.shuttledevicelist->itemData(m_configShuttle.shuttledevicelist->currentIndex()).toString();
if (device != KdenliveSettings::shuttledevice()) KdenliveSettings::setShuttledevice(device);
saveCurrentV4lProfile();
KdenliveSettings::setV4l_format(0);
}
-
+
+ // Check encoding profiles
+ QString data = m_configCapture.kcfg_v4l_profile->itemData(m_configCapture.kcfg_v4l_profile->currentIndex()).toString();
+ if (!data.isEmpty() && data.section(";", 0, 0) != KdenliveSettings::v4l_parameters()) {
+ KdenliveSettings::setV4l_parameters(data.section(";", 0, 0));
+ KdenliveSettings::setV4l_extension(data.section(";", 1, 1));
+ }
+ data = m_configCapture.kcfg_decklink_profile->itemData(m_configCapture.kcfg_decklink_profile->currentIndex()).toString();
+ if (!data.isEmpty() && data.section(";", 0, 0) != KdenliveSettings::decklink_parameters()) {
+ KdenliveSettings::setDecklink_parameters(data.section(";", 0, 0));
+ KdenliveSettings::setDecklink_extension(data.section(";", 1, 1));
+ }
+ data = m_configProject.kcfg_proxy_profile->itemData(m_configProject.kcfg_proxy_profile->currentIndex()).toString();
+ if (!data.isEmpty() && data.section(";", 0, 0) != KdenliveSettings::proxyparams()) {
+ KdenliveSettings::setProxyparams(data.section(";", 0, 0));
+ KdenliveSettings::setProxyextension(data.section(";", 1, 1));
+ }
+
if (updateCapturePath) emit updateCaptureFolder();
KdenliveSettings::setVolume(m_configSdl.kcfg_volume->value());
resetProfile = true;
}
-
- if (m_configProject.kcfg_enableproxy->isChecked() != KdenliveSettings::enableproxy()) {
- KdenliveSettings::setEnableproxy(m_configProject.kcfg_enableproxy->isChecked());
- }
-
- if (m_configProject.kcfg_generateproxy->isChecked() != KdenliveSettings::generateproxy()) {
- KdenliveSettings::setGenerateproxy(m_configProject.kcfg_generateproxy->isChecked());
- }
-
- if (m_configProject.kcfg_proxyminsize->value() != KdenliveSettings::proxyminsize()) {
- KdenliveSettings::setProxyminsize(m_configProject.kcfg_proxyminsize->value());
- }
if (m_modified) {
// The transcoding profiles were modified, save.
saveTranscodeProfiles();
}
-#ifndef NO_JOGSHUTTLE
+#ifdef USE_JOGSHUTTLE
m_shuttleModified = false;
QStringList actions;
void KdenliveSettingsDialog::slotShuttleModified()
{
-#ifndef NO_JOGSHUTTLE
+#ifdef USE_JOGSHUTTLE
QStringList actions;
actions << "monitor_pause"; // the Job rest position action.
foreach (KComboBox* button, m_shuttle_buttons) {
m_configCapture.kcfg_v4l_format->clear();
QString vl4ProfilePath = KStandardDirs::locateLocal("appdata", "profiles/video4linux");
- if (QFile::exists(vl4ProfilePath)) m_configCapture.kcfg_v4l_format->addItem(i18n("Current settings"));
-
+ if (QFile::exists(vl4ProfilePath)) {
+ m_configCapture.kcfg_v4l_format->addItem(i18n("Current settings"));
+ }
+
QStringList pixelformats = info.split(">", QString::SkipEmptyParts);
QString itemSize;
QString pixelFormat;
ProfilesDialog::saveProfile(profile, vl4ProfilePath);
}
+void KdenliveSettingsDialog::slotManageEncodingProfile()
+{
+ int type = 0;
+ if (currentPage() == m_page4) {
+ if (m_configCapture.tabWidget->currentIndex() == 1) type = 1;
+ else if (m_configCapture.tabWidget->currentIndex() == 3) type = 2;
+ }
+ EncodingProfilesDialog *d = new EncodingProfilesDialog(type);
+ d->exec();
+ delete d;
+ loadEncodingProfiles();
+}
+
+void KdenliveSettingsDialog::loadEncodingProfiles()
+{
+ KConfig conf("encodingprofiles.rc", KConfig::FullConfig, "appdata");
+
+ // Load v4l profiles
+ m_configCapture.kcfg_v4l_profile->blockSignals(true);
+ QString currentItem = m_configCapture.kcfg_v4l_profile->currentText();
+ m_configCapture.kcfg_v4l_profile->clear();
+ KConfigGroup group(&conf, "video4linux");
+ QMap< QString, QString > values = group.entryMap();
+ QMapIterator<QString, QString> i(values);
+ while (i.hasNext()) {
+ i.next();
+ if (!i.key().isEmpty()) m_configCapture.kcfg_v4l_profile->addItem(i.key(), i.value());
+ }
+ m_configCapture.kcfg_v4l_profile->blockSignals(false);
+ if (!currentItem.isEmpty()) m_configCapture.kcfg_v4l_profile->setCurrentIndex(m_configCapture.kcfg_v4l_profile->findText(currentItem));
+
+ // Load Decklink profiles
+ m_configCapture.kcfg_decklink_profile->blockSignals(true);
+ currentItem = m_configCapture.kcfg_decklink_profile->currentText();
+ m_configCapture.kcfg_decklink_profile->clear();
+ KConfigGroup group2(&conf, "decklink");
+ values = group2.entryMap();
+ QMapIterator<QString, QString> j(values);
+ while (j.hasNext()) {
+ j.next();
+ if (!j.key().isEmpty()) m_configCapture.kcfg_decklink_profile->addItem(j.key(), j.value());
+ }
+ m_configCapture.kcfg_decklink_profile->blockSignals(false);
+ if (!currentItem.isEmpty()) m_configCapture.kcfg_decklink_profile->setCurrentIndex(m_configCapture.kcfg_decklink_profile->findText(currentItem));
+
+ // Load Proxy profiles
+ m_configProject.kcfg_proxy_profile->blockSignals(true);
+ currentItem = m_configProject.kcfg_proxy_profile->currentText();
+ m_configProject.kcfg_proxy_profile->clear();
+ KConfigGroup group3(&conf, "proxy");
+ values = group3.entryMap();
+ QMapIterator<QString, QString> k(values);
+ while (k.hasNext()) {
+ k.next();
+ if (!k.key().isEmpty()) m_configProject.kcfg_proxy_profile->addItem(k.key(), k.value());
+ }
+ if (!currentItem.isEmpty()) m_configProject.kcfg_proxy_profile->setCurrentIndex(m_configProject.kcfg_proxy_profile->findText(currentItem));
+ m_configProject.kcfg_proxy_profile->blockSignals(false);
+ slotUpdateProxyProfile();
+
+}
+
+void KdenliveSettingsDialog::slotUpdateDecklinkProfile(int ix)
+{
+ if (ix == -1) ix = KdenliveSettings::decklink_profile();
+ else ix = m_configCapture.kcfg_decklink_profile->currentIndex();
+ QString data = m_configCapture.kcfg_decklink_profile->itemData(ix).toString();
+ if (data.isEmpty()) return;
+ m_configCapture.decklink_parameters->setPlainText(data.section(";", 0, 0));
+ //
+}
+
+void KdenliveSettingsDialog::slotUpdateV4lProfile(int ix)
+{
+ if (ix == -1) ix = KdenliveSettings::v4l_profile();
+ else ix = m_configCapture.kcfg_v4l_profile->currentIndex();
+ QString data = m_configCapture.kcfg_v4l_profile->itemData(ix).toString();
+ if (data.isEmpty()) return;
+ m_configCapture.v4l_parameters->setPlainText(data.section(";", 0, 0));
+ //
+}
+
+void KdenliveSettingsDialog::slotUpdateProxyProfile(int ix)
+{
+ if (ix == -1) ix = KdenliveSettings::v4l_profile();
+ else ix = m_configProject.kcfg_proxy_profile->currentIndex();
+ QString data = m_configProject.kcfg_proxy_profile->itemData(ix).toString();
+ if (data.isEmpty()) return;
+ m_configProject.proxyparams->setPlainText(data.section(";", 0, 0));
+ //
+}
+
+void KdenliveSettingsDialog::slotEditVideo4LinuxProfile()
+{
+ QString vl4ProfilePath = KStandardDirs::locateLocal("appdata", "profiles/video4linux");
+ ProfilesDialog *w = new ProfilesDialog(vl4ProfilePath);
+ if (w->exec() == QDialog::Accepted) {
+ // save and update profile
+ loadCurrentV4lProfileInfo();
+ }
+ delete w;
+}
+
#include "kdenlivesettingsdialog.moc"