+void Render::slotMultiStreamProducerFound(const QString &path, QList<int> audio_list, QList<int> video_list, stringMap data)
+{
+ if (KdenliveSettings::automultistreams()) {
+ for (int i = 1; i < video_list.count(); ++i) {
+ int vindex = video_list.at(i);
+ int aindex = 0;
+ if (i <= audio_list.count() -1) {
+ aindex = audio_list.at(i);
+ }
+ data.insert("video_index", QString::number(vindex));
+ data.insert("audio_index", QString::number(aindex));
+ data.insert("bypassDuplicate", "1");
+ emit addClip(KUrl(path), data);
+ }
+ return;
+ }
+
+ int width = 60.0 * m_mltProfile->dar();
+ int swidth = 60.0 * m_mltProfile->width() / m_mltProfile->height();
+ if (width % 2 == 1) width++;
+
+ KDialog dialog(qApp->activeWindow());
+ dialog.setCaption("Multi Stream Clip");
+ dialog.setButtons(KDialog::Ok | KDialog::Cancel);
+ dialog.setButtonText(KDialog::Ok, i18n("Import selected clips"));
+ QWidget *content = new QWidget(&dialog);
+ dialog.setMainWidget(content);
+ QVBoxLayout *vbox = new QVBoxLayout(content);
+ QLabel *lab1 = new QLabel(i18n("Additional streams for clip\n %1", path), content);
+ vbox->addWidget(lab1);
+ QList <QGroupBox*> groupList;
+ QList <QComboBox*> comboList;
+ // We start loading the list at 1, video index 0 should already be loaded
+ for (int j = 1; j < video_list.count(); j++) {
+ Mlt::Producer multiprod(* m_mltProfile, path.toUtf8().constData());
+ multiprod.set("video_index", video_list.at(j));
+ QImage thumb = KThumb::getFrame(&multiprod, 0, swidth, width, 60);
+ QGroupBox *streamFrame = new QGroupBox(i18n("Video stream %1", video_list.at(j)), content);
+ streamFrame->setProperty("vindex", video_list.at(j));
+ groupList << streamFrame;
+ streamFrame->setCheckable(true);
+ streamFrame->setChecked(true);
+ QVBoxLayout *vh = new QVBoxLayout( streamFrame );
+ QLabel *iconLabel = new QLabel(content);
+ iconLabel->setPixmap(QPixmap::fromImage(thumb));
+ vh->addWidget(iconLabel);
+ if (audio_list.count() > 1) {
+ QComboBox *cb = new QComboBox(content);
+ for (int k = 0; k < audio_list.count(); k++) {
+ cb->addItem(i18n("Audio stream %1", audio_list.at(k)), audio_list.at(k));
+ }
+ comboList << cb;
+ cb->setCurrentIndex(qMin(j, audio_list.count() - 1));
+ vh->addWidget(cb);
+ }
+ vbox->addWidget(streamFrame);
+ }
+ if (dialog.exec() == QDialog::Accepted) {
+ // import selected streams
+ for (int i = 0; i < groupList.count(); ++i) {
+ if (groupList.at(i)->isChecked()) {
+ int vindex = groupList.at(i)->property("vindex").toInt();
+ int aindex = comboList.at(i)->itemData(comboList.at(i)->currentIndex()).toInt();
+ data.insert("video_index", QString::number(vindex));
+ data.insert("audio_index", QString::number(aindex));
+ data.insert("bypassDuplicate", "1");
+ emit addClip(KUrl(path), data);
+ }
+ }
+ }
+}
+
+//static
+bool Render::checkX11Grab()
+{
+ if (KdenliveSettings::rendererpath().isEmpty() || KdenliveSettings::ffmpegpath().isEmpty()) return false;
+ QProcess p;
+ QStringList args;
+ args << "avformat:f-list";
+ p.start(KdenliveSettings::rendererpath(), args);
+ if (!p.waitForStarted()) return false;
+ if (!p.waitForFinished()) return false;
+ QByteArray result = p.readAllStandardError();
+ return result.contains("x11grab");
+}
+