EncodeDock::EncodeDock(QWidget *parent) : QDockWidget(parent), ui(new Ui::EncodeDock), m_presets(Mlt::Repository::presets()), m_immediateJob(0), m_profiles(Mlt::Profile::list()) { LOG_DEBUG() << "begin"; ui->setupUi(this); ui->stopCaptureButton->hide(); ui->videoCodecThreadsSpinner->setMaximum(QThread::idealThreadCount()); if (QThread::idealThreadCount() < 3) ui->parallelCheckbox->setHidden(true); toggleViewAction()->setIcon(windowIcon()); connect(ui->videoBitrateCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(on_videoBufferDurationChanged())); connect(ui->videoBufferSizeSpinner, SIGNAL(valueChanged(double)), this, SLOT(on_videoBufferDurationChanged())); m_presetsModel.setSourceModel(new QStandardItemModel(this)); m_presetsModel.setFilterCaseSensitivity(Qt::CaseInsensitive); ui->presetsTree->setModel(&m_presetsModel); loadPresets(); // populate the combos Mlt::Consumer c(MLT.profile(), "avformat"); c.set("f", "list"); c.set("acodec", "list"); c.set("vcodec", "list"); c.start(); c.stop(); Mlt::Properties* p = new Mlt::Properties(c.get_data("f")); ui->formatCombo->blockSignals(true); for (int i = 0; i < p->count(); i++) ui->formatCombo->addItem(p->get(i)); delete p; ui->formatCombo->model()->sort(0); ui->formatCombo->insertItem(0, tr("Automatic from extension")); ui->formatCombo->blockSignals(false); p = new Mlt::Properties(c.get_data("acodec")); for (int i = 0; i < p->count(); i++) ui->audioCodecCombo->addItem(p->get(i)); delete p; ui->audioCodecCombo->model()->sort(0); ui->audioCodecCombo->insertItem(0, tr("Default for format")); p = new Mlt::Properties(c.get_data("vcodec")); for (int i = 0; i < p->count(); i++) ui->videoCodecCombo->addItem(p->get(i)); delete p; ui->videoCodecCombo->model()->sort(0); ui->videoCodecCombo->insertItem(0, tr("Default for format")); on_resetButton_clicked(); LOG_DEBUG() << "end"; }
void AlsaWidget::loadPreset(Mlt::Properties& p) { QString s(p.get("resource")); int i = s.indexOf(':'); if (i > -1) ui->lineEdit->setText(s.mid(i + 1)); if (p.get("channels")) ui->alsaChannelsSpinBox->setValue(p.get_int("channels")); }
EncodeDock::EncodeDock(QWidget *parent) : QDockWidget(parent), ui(new Ui::EncodeDock), m_presets(Mlt::Repository::presets()), m_immediateJob(0), m_profiles(Mlt::Profile::list()) { qDebug() << "begin"; ui->setupUi(this); #ifdef Q_OS_UNIX ui->stopCaptureButton->hide(); #else delete ui->stopCaptureButton; #endif ui->videoCodecThreadsSpinner->setMaximum(QThread::idealThreadCount()); toggleViewAction()->setIcon(windowIcon()); m_presetsModel.setSourceModel(new QStandardItemModel(this)); m_presetsModel.setFilterCaseSensitivity(Qt::CaseInsensitive); ui->presetsTree->setModel(&m_presetsModel); loadPresets(); // populate the combos Mlt::Consumer c(MLT.profile(), "avformat"); c.set("f", "list"); c.set("acodec", "list"); c.set("vcodec", "list"); c.start(); c.stop(); Mlt::Properties* p = new Mlt::Properties(c.get_data("f")); for (int i = 0; i < p->count(); i++) ui->formatCombo->addItem(p->get(i)); delete p; ui->formatCombo->model()->sort(0); ui->formatCombo->insertItem(0, tr("Automatic from extension")); ui->formatCombo->setCurrentIndex(0); p = new Mlt::Properties(c.get_data("acodec")); for (int i = 0; i < p->count(); i++) ui->audioCodecCombo->addItem(p->get(i)); delete p; ui->audioCodecCombo->model()->sort(0); ui->audioCodecCombo->insertItem(0, tr("Default for format")); ui->audioCodecCombo->setCurrentIndex(0); p = new Mlt::Properties(c.get_data("vcodec")); for (int i = 0; i < p->count(); i++) ui->videoCodecCombo->addItem(p->get(i)); delete p; ui->videoCodecCombo->model()->sort(0); ui->videoCodecCombo->insertItem(0, tr("Default for format")); ui->videoCodecCombo->setCurrentIndex(0); on_audioRateControlCombo_activated(ui->audioRateControlCombo->currentIndex()); on_videoRateControlCombo_activated(ui->videoRateControlCombo->currentIndex()); qDebug() << "end"; }
void Video4LinuxWidget::loadPreset(Mlt::Properties& p) { ui->v4lLineEdit->setText(p.get("device")); ui->v4lWidthSpinBox->setValue(p.get_int("width")); ui->v4lHeightSpinBox->setValue(p.get_int("height")); ui->v4lFramerateSpinBox->setValue(p.get_double("framerate")); QString s(p.get("standard")); for (int i = 0; i < ui->v4lStandardCombo->count(); i++) { if (ui->v4lStandardCombo->itemText(i) == s) { ui->v4lStandardCombo->setCurrentIndex(i); break; } } ui->v4lChannelSpinBox->setValue(p.get_int("channel")); ui->v4lAudioComboBox->setCurrentIndex(p.get_int("audio_ix")); on_v4lAudioComboBox_activated(p.get_int("audio_ix")); }
EncodeDock::EncodeDock(QWidget *parent) : QDockWidget(parent), ui(new Ui::EncodeDock), m_presets(Mlt::Repository::presets()), m_immediateJob(0), m_profiles(Mlt::Profile::list()) { ui->setupUi(this); #ifdef Q_WS_X11 ui->stopCaptureButton->hide(); #else delete ui->stopCaptureButton; #endif ui->videoCodecThreadsSpinner->setMaximum(QThread::idealThreadCount()); toggleViewAction()->setIcon(QIcon::fromTheme("media-record", windowIcon())); ui->addPresetButton->setIcon(QIcon::fromTheme("list-add", ui->addPresetButton->icon())); ui->removePresetButton->setIcon(QIcon::fromTheme("list-remove", ui->removePresetButton->icon())); ui->reloadSignalButton->setIcon(QIcon::fromTheme("view-refresh", ui->reloadSignalButton->icon())); loadPresets(); // populate the combos Mlt::Consumer c(MLT.profile(), "avformat"); c.set("f", "list"); c.set("acodec", "list"); c.set("vcodec", "list"); c.start(); c.stop(); Mlt::Properties* p = new Mlt::Properties(c.get_data("f")); ui->formatCombo->addItem(tr("Automatic from extension")); for (int i = 0; i < p->count(); i++) ui->formatCombo->addItem(p->get(i)); delete p; p = new Mlt::Properties(c.get_data("acodec")); ui->audioCodecCombo->addItem(tr("Default for format")); for (int i = 0; i < p->count(); i++) ui->audioCodecCombo->addItem(p->get(i)); delete p; p = new Mlt::Properties(c.get_data("vcodec")); ui->videoCodecCombo->addItem(tr("Default for format")); for (int i = 0; i < p->count(); i++) ui->videoCodecCombo->addItem(p->get(i)); delete p; }
QUuid Controller::ensureHasUuid(Mlt::Properties& properties) const { if (properties.get(kUuidProperty)) { return uuid(properties); } else { QUuid newUid = QUuid::createUuid(); setUuid(properties, newUid); return newUid; } }
void TransitionHandler::cloneProperties(Mlt::Properties &dest, Mlt::Properties &source) { int count = source.count(); int i = 0; for ( i = 0; i < count; i ++ ) { char *value = source.get(i); if ( value != NULL ) { char *name = source.get_name( i ); if (name != NULL && name[0] != '_') dest.set(name, value); } } }
QMap<double,QString> BinController::takeGuidesData() { QLocale locale; // Load guides Mlt::Properties guidesProperties; Mlt::Properties playlistProps(m_binPlaylist->get_properties()); guidesProperties.pass_values(playlistProps, "kdenlive:guide."); qDebug()<<"***********\nFOUND GUIDES: "<<guidesProperties.count()<<"\n**********"; QMap <double,QString> guidesData; for (int i = 0; i < guidesProperties.count(); i++) { double time = locale.toDouble(guidesProperties.get_name(i)); guidesData.insert(time, guidesProperties.get(i)); // Clear bin data QString propertyName = "kdenlive:guide." + QString(guidesProperties.get_name(i)); m_binPlaylist->set(propertyName.toUtf8().constData(), (char *) NULL); } return guidesData; }
void NetworkProducerWidget::loadPreset(Mlt::Properties& p) { ui->urlLineEdit->setText(p.get("resource")); }
void CountProducerWidget::loadPreset(Mlt::Properties& p) { if (!p.get("direction") || !p.get("style")) return; int index = -1; index = ui->directionCombo->findData(QVariant(p.get("direction"))); ui->directionCombo->setCurrentIndex(index); index = ui->styleCombo->findData(QVariant(p.get("style"))); ui->styleCombo->setCurrentIndex(index); index = ui->soundCombo->findData(QVariant(p.get("sound"))); ui->soundCombo->setCurrentIndex(index); index = ui->backgroundCombo->findData(QVariant(p.get("background"))); ui->backgroundCombo->setCurrentIndex(index); ui->dropCheckBox->setChecked(p.get("drop")); ui->durationSpinBox->setValue(p.get_int("length")); if (m_producer) { m_producer->set("direction", p.get("direction")); m_producer->set("style", p.get("style")); m_producer->set("sound", p.get("sound")); m_producer->set("background", p.get("background")); m_producer->set("drop", p.get("drop")); setLength(producer(), ui->durationSpinBox->value()); m_producer->set(kShotcutDetailProperty, detail().toUtf8().constData()); emit producerChanged(producer()); } }
void EncodeDock::loadPresetFromProperties(Mlt::Properties& preset) { int audioQuality = -1; int videoQuality = -1; QStringList other; ui->disableAudioCheckbox->setChecked(preset.get_int("an")); ui->disableVideoCheckbox->setChecked(preset.get_int("vn")); m_extension.clear(); for (int i = 0; i < preset.count(); i++) { QString name(preset.get_name(i)); if (name == "f") { for (int i = 0; i < ui->formatCombo->count(); i++) if (ui->formatCombo->itemText(i) == preset.get("f")) { ui->formatCombo->blockSignals(true); ui->formatCombo->setCurrentIndex(i); ui->formatCombo->blockSignals(false); break; } } else if (name == "acodec") { for (int i = 0; i < ui->audioCodecCombo->count(); i++) if (ui->audioCodecCombo->itemText(i) == preset.get("acodec")) ui->audioCodecCombo->setCurrentIndex(i); if (ui->audioCodecCombo->currentText() == "libopus") // reset libopus to VBR (its default) ui->audioRateControlCombo->setCurrentIndex(RateControlQuality); } else if (name == "vcodec") { for (int i = 0; i < ui->videoCodecCombo->count(); i++) if (ui->videoCodecCombo->itemText(i) == preset.get("vcodec")) ui->videoCodecCombo->setCurrentIndex(i); } else if (name == "ar") ui->sampleRateCombo->lineEdit()->setText(preset.get("ar")); else if (name == "ab") ui->audioBitrateCombo->lineEdit()->setText(preset.get("ab")); else if (name == "vb") { ui->videoRateControlCombo->setCurrentIndex(RateControlAverage); ui->videoBitrateCombo->lineEdit()->setText(preset.get("vb")); } else if (name == "g") ui->gopSpinner->setValue(preset.get_int("g")); else if (name == "bf") ui->bFramesSpinner->setValue(preset.get_int("bf")); else if (name == "deinterlace") { ui->scanModeCombo->setCurrentIndex(preset.get_int("deinterlace")); ui->scanModeCombo->setEnabled(false); } else if (name == "progressive") { ui->scanModeCombo->setCurrentIndex(preset.get_int("progressive")); ui->scanModeCombo->setEnabled(false); } else if (name == "top_field_first") { ui->fieldOrderCombo->setCurrentIndex(preset.get_int("top_field_first")); } else if (name == "width") { ui->widthSpinner->setValue(preset.get_int("width")); ui->widthSpinner->setEnabled(false); } else if (name == "height") { ui->heightSpinner->setValue(preset.get_int("height")); ui->heightSpinner->setEnabled(false); } else if (name == "aspect") { double dar = preset.get_double("aspect"); switch (int(dar * 100)) { case 133: ui->aspectNumSpinner->setValue(4); ui->aspectDenSpinner->setValue(3); break; case 177: ui->aspectNumSpinner->setValue(16); ui->aspectDenSpinner->setValue(9); break; case 56: ui->aspectNumSpinner->setValue(9); ui->aspectDenSpinner->setValue(16); break; default: ui->aspectNumSpinner->setValue(dar * 1000); ui->aspectDenSpinner->setValue(1000); break; } ui->aspectNumSpinner->setEnabled(false); ui->aspectDenSpinner->setEnabled(false); } else if (name == "r") { ui->fpsSpinner->setValue(preset.get_double("r")); ui->fpsSpinner->setEnabled(false); } else if (name == "pix_fmt") { QString pix_fmt(preset.get("pix_fmt")); if (pix_fmt != "yuv420p") other.append(QString("%1=%2").arg(name).arg(pix_fmt)); } else if (name == "pass") ui->dualPassCheckbox->setChecked(true); else if (name == "aq") { ui->audioRateControlCombo->setCurrentIndex(RateControlQuality); audioQuality = preset.get_int("aq"); } else if (name == "vbr") { // libopus rate mode QString value(preset.get("vbr")); if (value == "off") ui->audioRateControlCombo->setCurrentIndex(RateControlConstant); else if (value == "constrained") ui->audioRateControlCombo->setCurrentIndex(RateControlAverage); else ui->audioRateControlCombo->setCurrentIndex(RateControlQuality); } else if (name == "vq") { ui->videoRateControlCombo->setCurrentIndex(RateControlQuality); videoQuality = preset.get_int("vq"); } else if (name == "qscale") { ui->videoRateControlCombo->setCurrentIndex(RateControlQuality); videoQuality = preset.get_int("qscale"); } else if (name == "crf") { ui->videoRateControlCombo->setCurrentIndex(RateControlQuality); videoQuality = preset.get_int("crf"); } else if (name == "bufsize") { // traditionally this means video only ui->videoRateControlCombo->setCurrentIndex(RateControlConstant); ui->videoBufferSizeSpinner->setValue(getBufferSize(preset, "bufsize")); } else if (name == "vbufsize") { ui->videoRateControlCombo->setCurrentIndex(RateControlConstant); ui->videoBufferSizeSpinner->setValue(getBufferSize(preset, "vbufsize")); } else if (name == "threads") { // TODO: should we save the thread count and restore it if preset is not 1? if (preset.get_int("threads") == 1) ui->videoCodecThreadsSpinner->setValue(1); } else if (name == "meta.preset.extension") { m_extension = preset.get("meta.preset.extension"); } else if (name == "deinterlace_method") { name = preset.get("deinterlace_method"); if (name == "onefield") ui->deinterlacerCombo->setCurrentIndex(0); else if (name == "linearblend") ui->deinterlacerCombo->setCurrentIndex(1); else if (name == "yadif-nospatial") ui->deinterlacerCombo->setCurrentIndex(2); else if (name == "yadif") ui->deinterlacerCombo->setCurrentIndex(3); ui->deinterlacerCombo->setDisabled(true); } else if (name == "rescale") { name = preset.get("rescale"); if (name == "nearest" || name == "neighbor") ui->interpolationCombo->setCurrentIndex(0); else if (name == "bilinear") ui->interpolationCombo->setCurrentIndex(1); else if (name == "bicubic") ui->interpolationCombo->setCurrentIndex(2); else if (name == "hyper" || name == "lanczos") ui->interpolationCombo->setCurrentIndex(3); ui->interpolationCombo->setDisabled(true); } else if (name != "an" && name != "vn" && name != "threads" && !name.startsWith('_') && !name.startsWith("meta.preset.")) { other.append(QString("%1=%2").arg(name).arg(preset.get(i))); } } ui->advancedTextEdit->setPlainText(other.join("\n")); // normalize the quality settings // quality depends on codec if (ui->audioRateControlCombo->currentIndex() == RateControlQuality && audioQuality > -1) { const QString& acodec = ui->audioCodecCombo->currentText(); if (acodec == "libmp3lame") // 0 (best) - 9 (worst) ui->audioQualitySpinner->setValue(TO_RELATIVE(9, 0, audioQuality)); if (acodec == "libvorbis" || acodec == "vorbis") // 0 (worst) - 10 (best) ui->audioQualitySpinner->setValue(TO_RELATIVE(0, 10, audioQuality)); else // aac: 0 (worst) - 500 (best) ui->audioQualitySpinner->setValue(TO_RELATIVE(0, 500, audioQuality)); } if (ui->videoRateControlCombo->currentIndex() == RateControlQuality && videoQuality > -1) { const QString& vcodec = ui->videoCodecCombo->currentText(); //val = min + (max - min) * paramval; if (vcodec == "libx264" || vcodec == "libx265") // 0 (best, 100%) - 51 (worst) ui->videoQualitySpinner->setValue(TO_RELATIVE(51, 0, videoQuality)); else if (vcodec.startsWith("libvpx")) // 0 (best, 100%) - 63 (worst) ui->videoQualitySpinner->setValue(TO_RELATIVE(63, 0, videoQuality)); else // 1 (best, NOT 100%) - 31 (worst) ui->videoQualitySpinner->setValue(TO_RELATIVE(31, 1, videoQuality)); } on_audioRateControlCombo_activated(ui->audioRateControlCombo->currentIndex()); on_videoRateControlCombo_activated(ui->videoRateControlCombo->currentIndex()); }
QUuid Controller::uuid(Mlt::Properties &properties) const { return QUuid(properties.get(kUuidProperty)); }
void NetworkProducerWidget::loadPreset(Mlt::Properties& p) { const char *resource = p.get("resource"); if (qstrcmp(resource, "<tractor>") && qstrcmp(resource, "<playlist>")) ui->urlLineEdit->setText(resource); }
QMap <QString, QString> ClipController::getPropertiesFromPrefix(const QString &prefix, bool withPrefix) { Mlt::Properties subProperties; subProperties.pass_values(*m_properties, prefix.toUtf8().constData()); QMap <QString,QString> subclipsData; for (int i = 0; i < subProperties.count(); i++) { subclipsData.insert(withPrefix ? QString(prefix + subProperties.get_name(i)) : subProperties.get_name(i), subProperties.get(i)); } return subclipsData; }
void BinController::initializeBin(Mlt::Playlist playlist) { // Load folders Mlt::Properties folderProperties; Mlt::Properties playlistProps(playlist.get_properties()); folderProperties.pass_values(playlistProps, "kdenlive:folder."); QMap <QString,QString> foldersData; for (int i = 0; i < folderProperties.count(); i++) { foldersData.insert(folderProperties.get_name(i), folderProperties.get(i)); } emit loadFolders(foldersData); // Read notes QString notes = playlistProps.get("kdenlive:documentnotes"); emit setDocumentNotes(notes); // Fill Controller's list m_binPlaylist = new Mlt::Playlist(playlist); m_binPlaylist->set("id", kPlaylistTrackId); int max = m_binPlaylist->count(); for (int i = 0; i < max; i++) { Mlt::Producer *producer = m_binPlaylist->get_clip(i); if (producer->is_blank() || !producer->is_valid()) continue; QString id = producer->parent().get("id"); if (id.contains(QStringLiteral("_"))) { // This is a track producer QString mainId = id.section(QStringLiteral("_"), 0, 0); QString track = id.section(QStringLiteral("_"), 1, 1); if (m_clipList.contains(mainId)) { // The controller for this track producer already exists } else { // Create empty controller for this track ClipController *controller = new ClipController(this); m_clipList.insert(mainId, controller); } delete producer; } else { if (m_clipList.contains(id) && m_clipList.value(id)) { //Controller was already added by a track producer, add master now m_clipList.value(id)->addMasterProducer(producer->parent()); } else { // Controller has not been created yet ClipController *controller = new ClipController(this, producer->parent()); // fix MLT somehow adding root to color producer's resource (report upstream) if (strcmp(producer->parent().get("mlt_service"), "color") == 0) { QString color = producer->parent().get("resource"); if (color.contains(QStringLiteral("/"))) { color = color.section(QStringLiteral("/"), -1, -1); producer->parent().set("resource", color.toUtf8().constData()); } } m_clipList.insert(id, controller); } } emit loadingBin(i + 1); } // Load markers Mlt::Properties markerProperties; markerProperties.pass_values(playlistProps, "kdenlive:marker."); QMap <QString,QString> markersData; for (int i = 0; i < markerProperties.count(); i++) { QString markerId = markerProperties.get_name(i); QString controllerId = markerId.section(QStringLiteral(":"), 0, 0); ClipController *ctrl = m_clipList.value(controllerId); if (!ctrl) continue; ctrl->loadSnapMarker(markerId.section(QStringLiteral(":"), 1), markerProperties.get(i)); } }