m_refreshTimer.setSingleShot(true);
m_refreshTimer.setInterval(100);
connect(&m_refreshTimer, SIGNAL(timeout()), this, SLOT(refresh()));
- connect(this, SIGNAL(multiStreamFound(const QString &,QList<int>,QList<int>,stringMap)), this, SLOT(slotMultiStreamProducerFound(const QString &,QList<int>,QList<int>,stringMap)));
+ connect(this, SIGNAL(multiStreamFound(QString,QList<int>,QList<int>,stringMap)), this, SLOT(slotMultiStreamProducerFound(QString,QList<int>,QList<int>,stringMap)));
connect(this, SIGNAL(checkSeeking()), this, SLOT(slotCheckSeeking()));
- connect(this, SIGNAL(mltFrameReceived(Mlt::Frame *)), this, SLOT(showFrame(Mlt::Frame *)), Qt::UniqueConnection);
+ connect(this, SIGNAL(mltFrameReceived(Mlt::Frame*)), this, SLOT(showFrame(Mlt::Frame*)), Qt::UniqueConnection);
}
Render::~Render()
if (m_mltConsumer->is_valid()) {
externalConsumer = true;
m_mltConsumer->set("terminate_on_pause", 0);
- m_mltConsumer->set("deinterlace_method", "onefield");
- m_mltConsumer->set("rescale", "nearest");
+ m_mltConsumer->set("deinterlace_method", KdenliveSettings::mltdeinterlacer().toUtf8().constData());
+ m_mltConsumer->set("rescale", KdenliveSettings::mltinterpolation().toUtf8().constData());
m_mltConsumer->set("buffer", "1");
m_mltConsumer->set("real_time", KdenliveSettings::mltthreads());
}
// Set defaults for decklink consumer
if (m_mltConsumer) {
m_mltConsumer->set("terminate_on_pause", 0);
- m_mltConsumer->set("deinterlace_method", "onefield");
+ m_mltConsumer->set("deinterlace_method", KdenliveSettings::mltdeinterlacer().toUtf8().constData());
externalConsumer = true;
}
}
}
//m_mltConsumer->set("resize", 1);
m_mltConsumer->set("window_background", KdenliveSettings::window_background().name().toUtf8().constData());
- m_mltConsumer->set("rescale", "nearest");
+ m_mltConsumer->set("rescale", KdenliveSettings::mltinterpolation().toUtf8().constData());
mlt_log_set_callback(kdenlive_callback);
QString audioDevice = KdenliveSettings::audiodevicename();
if (service.type() != tractor_type || tractor.count() < 2) return;
Mlt::Field *field = tractor.field();
if (doit) {
- for (int i = 1, screen = 0; i < tractor.count() && screen < 4; i++) {
+ for (int i = 1, screen = 0; i < tractor.count() && screen < 4; ++i) {
Mlt::Producer trackProducer(tractor.track(i));
kDebug() << "// TRACK: " << i << ", HIDE: " << trackProducer.get("hide");
if (QString(trackProducer.get("hide")).toInt() != 1) {
m_infoMutex.unlock();
return;
}
- for (int i = 0; i < m_requestList.count(); i++) {
+ for (int i = 0; i < m_requestList.count(); ++i) {
if (m_requestList.at(i).clipId == clipId) {
// Clip is already queued
m_infoMutex.unlock();
{
if (m_processingClipId.contains(id)) return;
QMutexLocker lock(&m_infoMutex);
- for (int i = 0; i < m_requestList.count(); i++) {
+ for (int i = 0; i < m_requestList.count(); ++i) {
requestClipInfo info = m_requestList.at(i);
if (info.clipId == id) {
if (i == 0) break;
{
if (m_processingClipId.contains(id)) return true;
QMutexLocker lock(&m_infoMutex);
- for (int i = 0; i < m_requestList.count(); i++) {
+ for (int i = 0; i < m_requestList.count(); ++i) {
if (m_requestList.at(i).clipId == id) {
return true;
}
int streams = producer->get_int("meta.media.nb_streams");
QList <int> audio_list;
QList <int> video_list;
- for (int i = 0; i < streams; i++) {
+ for (int i = 0; i < streams; ++i) {
QByteArray propertyName = QString("meta.media.%1.stream.type").arg(i).toLocal8Bit();
QString type = producer->get(propertyName.data());
if (type == "audio") audio_list.append(i);
int dropFrames = KdenliveSettings::mltthreads();
if (show == false) dropFrames = -dropFrames;
m_mltConsumer->stop();
- if (m_winid == 0)
- m_mltConsumer->set("real_time", dropFrames);
- else
- m_mltConsumer->set("play.real_time", dropFrames);
-
+ m_mltConsumer->set("real_time", dropFrames);
if (m_mltConsumer->start() == -1) {
kDebug(QtWarningMsg) << "ERROR, Cannot start monitor";
}
}
}
+void Render::setConsumerProperty(const QString &name, const QString &value)
+{
+ QMutexLocker locker(&m_mutex);
+ if (m_mltConsumer) {
+ m_mltConsumer->stop();
+ m_mltConsumer->set(name.toUtf8().constData(), value.toUtf8().constData());
+ if (m_isActive && m_mltConsumer->start() == -1) {
+ kDebug(QtWarningMsg) << "ERROR, Cannot start monitor";
+ }
+
+ }
+}
+
bool Render::isPlaying() const
{
if (!m_mltConsumer || m_mltConsumer->is_stopped()) return false;
delete frame;
emit showImageSignal(qimage);
if (sendFrameForAnalysis) {
- emit frameUpdated(qimage);//.rgbSwapped());
+ emit frameUpdated(qimage);
}
} else delete frame;
showFrameSemaphore.release();
int clipIndex = trackPlaylist.get_clip_index_at(insertPos);
trackPlaylist.insert_blank(clipIndex, cutDuration);
}
+ trackPlaylist.consolidate_blanks(0);
int newIndex = trackPlaylist.insert_at(insertPos, clip, 1);
delete clip;
/*if (QString(prod->get("transparency")).toInt() == 1)
/* // Display playlist info
kDebug()<<"//////////// BEFORE";
- for (int i = 0; i < trackPlaylist.count(); i++) {
+ for (int i = 0; i < trackPlaylist.count(); ++i) {
int blankStart = trackPlaylist.clip_start(i);
int blankDuration = trackPlaylist.clip_length(i) - 1;
QString blk;
Mlt::Filter *dup = new Mlt::Filter(*m_mltProfile, filter->get("mlt_service"));
if (dup && dup->is_valid()) {
Mlt::Properties entries(filter->get_properties());
- for (int i = 0; i < entries.count(); i++) {
+ for (int i = 0; i < entries.count(); ++i) {
dup->set(entries.get_name(i), entries.get(i));
}
dupService.attach(*dup);
return true;
/* // Display playlist info
kDebug()<<"//////////// AFTER";
- for (int i = 0; i < trackPlaylist.count(); i++) {
+ for (int i = 0; i < trackPlaylist.count(); ++i) {
int blankStart = trackPlaylist.clip_start(i);
int blankDuration = trackPlaylist.clip_length(i) - 1;
QString blk;
delete clip2;
if (!filtersList.isEmpty()) {
- for (int i = 0; i < filtersList.count(); i++)
+ for (int i = 0; i < filtersList.count(); ++i)
destService.attach(*(filtersList.at(i)));
}
return true;
/* // Display playlist info
kDebug()<<"//// AFTER";
- for (int i = 0; i < trackPlaylist.count(); i++) {
+ for (int i = 0; i < trackPlaylist.count(); ++i) {
int blankStart = trackPlaylist.clip_start(i);
int blankDuration = trackPlaylist.clip_length(i) - 1;
QString blk;
/* kDebug()<<"-------------\nTRACK "<<trackNb<<" HAS "<<clipNb<<" CLPIS";
kDebug() << "INSERT SPACE AT: "<<insertPos<<", DIFF: "<<diff<<", TK: "<<trackNb;
- for (int i = 0; i < clipNb; i++) {
+ for (int i = 0; i < clipNb; ++i) {
kDebug()<<"CLIP "<<i<<", START: "<<trackPlaylist.clip_start(i)<<", END: "<<trackPlaylist.clip_start(i) + trackPlaylist.clip_length(i);
if (trackPlaylist.is_blank(i)) kDebug()<<"++ BLANK ++ ";
kDebug()<<"-------------";
newLength = trackPlaylist.clip_length(clipIndex);
service.unlock();
} else if (speed == 1.0 && strobe < 2) {
+ if (!prod || !prod->is_valid()) {
+ kDebug()<<"// Something is wrong with producer";
+ return -1;
+ }
service.lock();
Mlt::Producer *clip = trackPlaylist.replace_with_blank(clipIndex);
filter = service.filter(ct);
}
- addFilterToService(service, params, duration);
+ bool success = addFilterToService(service, params, duration);
// re-add following filters
- for (int i = 0; i < filtersList.count(); i++) {
+ for (int i = 0; i < filtersList.count(); ++i) {
Mlt::Filter *filter = filtersList.at(i);
if (updateIndex)
filter->set("kdenlive_ix", filter->get_int("kdenlive_ix") + 1);
}
service.unlock();
if (doRefresh) refresh();
- return true;
+ return success;
}
// create filter
QString tag = params.paramValue("tag");
//kDebug() << " / / INSERTING EFFECT: " << tag << ", REGI: " << region;
- char *filterTag = qstrdup(tag.toUtf8().constData());
- char *filterId = qstrdup(params.paramValue("id").toUtf8().constData());
QString kfr = params.paramValue("keyframes");
- if (!kfr.isEmpty()) {
+ if (!kfr.isEmpty()) {
QStringList keyFrames = kfr.split(';', QString::SkipEmptyParts);
//kDebug() << "// ADDING KEYFRAME EFFECT: " << params.paramValue("keyframes");
char *starttag = qstrdup(params.paramValue("starttag", "start").toUtf8().constData());
int offset = 0;
// Special case, only one keyframe, means we want a constant value
if (keyFrames.count() == 1) {
- Mlt::Filter *filter = new Mlt::Filter(*m_mltProfile, filterTag);
+ Mlt::Filter *filter = new Mlt::Filter(*m_mltProfile, qstrdup(tag.toUtf8().constData()));
if (filter && filter->is_valid()) {
- filter->set("kdenlive_id", filterId);
+ filter->set("kdenlive_id", qstrdup(params.paramValue("id").toUtf8().constData()));
int x1 = keyFrames.at(0).section(':', 0, 0).toInt();
double y1 = keyFrames.at(0).section(':', 1, 1).toDouble();
for (int j = 0; j < params.count(); j++) {
//kDebug() << "// ADDING KEYFRAME vals: " << min<<" / "<<max<<", "<<y1<<", factor: "<<factor;
filter->set(starttag, m_locale.toString(((min + y1) - paramOffset) / factor).toUtf8().data());
service.attach(*filter);
- }
+ } else {
+ delete[] starttag;
+ delete[] endtag;
+ kDebug() << "filter is NULL";
+ service.unlock();
+ return false;
+ }
} else for (int i = 0; i < keyFrames.size() - 1; ++i) {
- Mlt::Filter *filter = new Mlt::Filter(*m_mltProfile, filterTag);
+ Mlt::Filter *filter = new Mlt::Filter(*m_mltProfile, qstrdup(tag.toUtf8().constData()));
if (filter && filter->is_valid()) {
- filter->set("kdenlive_id", filterId);
+ filter->set("kdenlive_id", qstrdup(params.paramValue("id").toUtf8().constData()));
int x1 = keyFrames.at(i).section(':', 0, 0).toInt() + offset;
double y1 = keyFrames.at(i).section(':', 1, 1).toDouble();
int x2 = keyFrames.at(i + 1).section(':', 0, 0).toInt();
filter->set(endtag, m_locale.toString(((min + y2) - paramOffset) / factor).toUtf8().data());
service.attach(*filter);
offset = 1;
- }
+ } else {
+ delete[] starttag;
+ delete[] endtag;
+ kDebug() << "filter is NULL";
+ service.unlock();
+ return false;
+ }
}
delete[] starttag;
delete[] endtag;
} else {
Mlt::Filter *filter;
QString prefix;
- filter = new Mlt::Filter(*m_mltProfile, filterTag);
+ filter = new Mlt::Filter(*m_mltProfile, qstrdup(tag.toUtf8().constData()));
if (filter && filter->is_valid()) {
- filter->set("kdenlive_id", filterId);
+ filter->set("kdenlive_id", qstrdup(params.paramValue("id").toUtf8().constData()));
} else {
kDebug() << "filter is NULL";
service.unlock();
// attach filter to the clip
service.attach(*filter);
}
-
- delete[] filterId;
- delete[] filterTag;
return true;
}
}
}
- for (int i = 0; i < filtersList.count(); i++) {
+ for (int i = 0; i < filtersList.count(); ++i) {
clipService.attach(*(filtersList.at(i)));
}
}
}
- for (int i = 0; i < filtersList.count(); i++) {
+ for (int i = 0; i < filtersList.count(); ++i) {
clipService.attach(*(filtersList.at(i)));
}
refresh();
/* // Display playlist info
kDebug()<<"//////////// BEFORE RESIZE";
- for (int i = 0; i < trackPlaylist.count(); i++) {
+ for (int i = 0; i < trackPlaylist.count(); ++i) {
int blankStart = trackPlaylist.clip_start(i);
int blankDuration = trackPlaylist.clip_length(i) - 1;
QString blk;
int Render::getLowestNonMutedAudioTrack(Mlt::Tractor tractor)
{
- for (int i = 1; i < tractor.count(); i++) {
+ for (int i = 1; i < tractor.count(); ++i) {
Mlt::Producer trackProducer(tractor.track(i));
if (trackProducer.get_int("hide") < 2) return i;
}
}
// Re-add correct audio transitions
- for (int i = lowestTrack + 1; i < tractor.count(); i++) {
+ for (int i = lowestTrack + 1; i < tractor.count(); ++i) {
Mlt::Transition *transition = new Mlt::Transition(*m_mltProfile, "mix");
transition->set("always_active", 1);
transition->set("combine", 1);
bool checkLength = false;
if (endTrack == startTrack) {
Mlt::Producer *clipProducer = trackPlaylist.replace_with_blank(clipIndex);
+ if (!clipProducer) {
+ kDebug() << "// Cannot get clip at index: "<<clipIndex<<" / "<< moveStart;
+ service.unlock();
+ return false;
+ }
+ trackPlaylist.consolidate_blanks(0);
if (!overwrite) {
bool success = true;
if (!trackPlaylist.is_blank_at(moveEnd) || !clipProducer || !clipProducer->is_valid() || clipProducer->is_blank()) {
service.unlock();
return false;
}
- }
-
- if (overwrite) {
+ } else {
+ // Overwrite mode
trackPlaylist.remove_region(moveEnd, clipProducer->get_playtime());
- int clipIndex = trackPlaylist.get_clip_index_at(moveEnd);
- trackPlaylist.insert_blank(clipIndex, clipProducer->get_playtime() - 1);
+ int ix = trackPlaylist.get_clip_index_at(moveEnd);
+ trackPlaylist.insert_blank(ix, clipProducer->get_playtime() - 1);
+ trackPlaylist.consolidate_blanks(0);
}
int newIndex = trackPlaylist.insert_at(moveEnd, clipProducer, 1);
if (newIndex == -1) {
service.unlock();
return false;
}
- trackPlaylist.consolidate_blanks(1);
+ trackPlaylist.consolidate_blanks(0);
delete clipProducer;
- if (newIndex + 1 == trackPlaylist.count()) checkLength = true;
+ if (newIndex + 1 >= trackPlaylist.count()) checkLength = true;
} else {
Mlt::Producer destTrackProducer(tractor.track(endTrack));
Mlt::Playlist destTrackPlaylist((mlt_playlist) destTrackProducer.get_service());
destTrackPlaylist.remove_region(moveEnd, clip->get_playtime());
int clipIndex = destTrackPlaylist.get_clip_index_at(moveEnd);
destTrackPlaylist.insert_blank(clipIndex, clip->get_playtime() - 1);
+ destTrackPlaylist.consolidate_blanks(0);
}
int newIndex = destTrackPlaylist.insert_at(moveEnd, clip, 1);
Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service());
int clipNb = trackPlaylist.count();
//kDebug() << "// PARSING SCENE TRACK: " << t << ", CLIPS: " << clipNb;
- for (int i = 0; i < clipNb; i++) {
+ for (int i = 0; i < clipNb; ++i) {
Mlt::Producer *c = trackPlaylist.get_clip(i);
int pos = trackPlaylist.clip_start(i);
if (!list.contains(pos)) list.append(pos);
Mlt::Properties trans_props(transition.get_properties());
Mlt::Transition new_transition(*m_mltProfile, transition.get("mlt_service"));
Mlt::Properties new_trans_props(new_transition.get_properties());
- new_trans_props.inherit(trans_props);
- new_transition.set_in_and_out(new_in, new_out);
+ // We cannot use MLT's property inherit because it also clones internal values like _unique_id which messes up the playlist
+ cloneProperties(new_trans_props, trans_props);
+ new_transition.set_in_and_out(new_in, new_out);
field->disconnect_service(transition);
mltPlantTransition(field, new_transition, newTransitionTrack, newTrack);
- //field->plant_transition(new_transition, newTransitionTrack, newTrack);
} else transition.set_in_and_out(new_in, new_out);
break;
}
return found;
}
+void Render::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);
+ }
+ }
+}
void Render::mltPlantTransition(Mlt::Field *field, Mlt::Transition &tr, int a_track, int b_track)
{
Mlt::Properties trans_props(transition.get_properties());
Mlt::Transition *cp = new Mlt::Transition(*m_mltProfile, transition.get("mlt_service"));
Mlt::Properties new_trans_props(cp->get_properties());
- new_trans_props.inherit(trans_props);
+ //new_trans_props.inherit(trans_props);
+ cloneProperties(new_trans_props, trans_props);
trList.append(cp);
field->disconnect_service(transition);
}
field->plant_transition(tr, a_track, b_track);
// re-add upper transitions
- for (int i = trList.count() - 1; i >= 0; i--) {
+ for (int i = trList.count() - 1; i >= 0; --i) {
//kDebug()<< "REPLANT ON TK: "<<trList.at(i)->get_a_track()<<", "<<trList.at(i)->get_b_track();
field->plant_transition(*trList.at(i), trList.at(i)->get_a_track(), trList.at(i)->get_b_track());
}
QStringList permanentProps;
permanentProps << "factory" << "kdenlive_id" << "mlt_service" << "mlt_type" << "in";
permanentProps << "out" << "a_track" << "b_track";
- for (int i = 0; i < mlt_properties_count(transproperties); i++) {
+ for (int i = 0; i < mlt_properties_count(transproperties); ++i) {
QString propName = mlt_properties_get_name(transproperties, i);
if (!propName.startsWith('_') && ! permanentProps.contains(propName)) {
mlt_properties_set(transproperties, propName.toUtf8().constData(), "");
{
QDomNodeList attribs = xml.elementsByTagName("parameter");
QMap<QString, QString> map;
- for (int i = 0; i < attribs.count(); i++) {
+ for (int i = 0; i < attribs.count(); ++i) {
QDomElement e = attribs.item(i).toElement();
QString name = e.attribute("name");
//kDebug()<<"-- TRANSITION PARAM: "<<name<<" = "<< e.attribute("name")<<" / " << e.attribute("value");
if (values.size() > 0)
txtNeu << (int)values[0].toDouble();
int i = 0;
- for (i = 0; i < separators.size() && i + 1 < values.size(); i++) {
+ for (i = 0; i < separators.size() && i + 1 < values.size(); ++i) {
txtNeu << separators[i];
txtNeu << (int)(values[i+1].toDouble());
}
Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service());
if (!trackPlaylist.is_valid()) continue;
int clipNb = trackPlaylist.count();
- for (int i = 0; i < clipNb; i++) {
+ for (int i = 0; i < clipNb; ++i) {
Mlt::Producer *c = trackPlaylist.get_clip(i);
if (c == NULL) continue;
QString prodId = c->parent().get("id");
Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service());
if (!trackPlaylist.is_valid()) continue;
int clipNb = trackPlaylist.count();
- for (int i = 0; i < clipNb; i++) {
+ for (int i = 0; i < clipNb; ++i) {
Mlt::Producer *c = trackPlaylist.get_clip(i);
Mlt::Producer *nprod = new Mlt::Producer(c->get_parent());
if (nprod) {
Mlt::Properties trans_props(transition.get_properties());
Mlt::Transition *cp = new Mlt::Transition(*m_mltProfile, transition.get("mlt_service"));
Mlt::Properties new_trans_props(cp->get_properties());
- new_trans_props.inherit(trans_props);
+ cloneProperties(new_trans_props, trans_props);
+ //new_trans_props.inherit(trans_props);
if (trackChanged) {
// Transition track needs to be adjusted
mltPlantTransition(field, transition, 1, ct);
// re-add transitions
- for (int i = trList.count() - 1; i >= 0; i--) {
+ for (int i = trList.count() - 1; i >= 0; --i) {
field->plant_transition(*trList.at(i), trList.at(i)->get_a_track(), trList.at(i)->get_b_track());
}
qDeleteAll(trList);
QDomNode track = doc.elementsByTagName("track").at(ix);
QDomNode tractor = doc.elementsByTagName("tractor").at(0);
QDomNodeList transitions = doc.elementsByTagName("transition");
- for (int i = 0; i < transitions.count(); i++) {
+ for (int i = 0; i < transitions.count(); ++i) {
QDomElement e = transitions.at(i).toElement();
QDomNodeList props = e.elementsByTagName("property");
QMap <QString, QString> mappedProps;
}
if (mappedProps.value("mlt_service") == "mix" && mappedProps.value("b_track").toInt() == tracksCount) {
tractor.removeChild(transitions.at(i));
- i--;
+ --i;
} else if (mappedProps.value("mlt_service") != "mix" && (mappedProps.value("b_track").toInt() >= ix || mappedProps.value("a_track").toInt() >= ix)) {
// Transition needs to be moved
int a_track = mappedProps.value("a_track").toInt();
if (b_track == ix) {
// transition was on the deleted track, so remove it
tractor.removeChild(transitions.at(i));
- i--;
+ --i;
continue;
}
if (b_track > 0 && b_track > ix) b_track --;
double factor = new_fps / current_fps;
QDomNodeList producers = doc.elementsByTagName("producer");
- for (int i = 0; i < producers.count(); i++) {
+ for (int i = 0; i < producers.count(); ++i) {
QDomElement prod = producers.at(i).toElement();
prod.removeAttribute("in");
prod.removeAttribute("out");
}
QDomNodeList entries = doc.elementsByTagName("entry");
- for (int i = 0; i < entries.count(); i++) {
+ for (int i = 0; i < entries.count(); ++i) {
QDomElement entry = entries.at(i).toElement();
int in = entry.attribute("in").toInt();
int out = entry.attribute("out").toInt();
}
QDomNodeList blanks = doc.elementsByTagName("blank");
- for (int i = 0; i < blanks.count(); i++) {
+ for (int i = 0; i < blanks.count(); ++i) {
QDomElement blank = blanks.at(i).toElement();
int length = blank.attribute("length").toInt();
length = factor * length + 0.5;
}
QDomNodeList filters = doc.elementsByTagName("filter");
- for (int i = 0; i < filters.count(); i++) {
+ for (int i = 0; i < filters.count(); ++i) {
QDomElement filter = filters.at(i).toElement();
int in = filter.attribute("in").toInt();
int out = filter.attribute("out").toInt();
}
QDomNodeList transitions = doc.elementsByTagName("transition");
- for (int i = 0; i < transitions.count(); i++) {
+ for (int i = 0; i < transitions.count(); ++i) {
QDomElement transition = transitions.at(i).toElement();
int in = transition.attribute("in").toInt();
int out = transition.attribute("out").toInt();
return false;
}
KdenliveSettings::setDecklink_device_found(true);
- for (int i = 0; i < found_devices; i++) {
+ for (int i = 0; i < found_devices; ++i) {
char *tmp = qstrdup(QString("device.%1").arg(i).toUtf8().constData());
devicelist->addItem(bm.get(tmp));
delete[] tmp;
return false;
}
KdenliveSettings::setDecklink_device_found(true);
- for (int i = 0; i < found_devices; i++) {
+ for (int i = 0; i < found_devices; ++i) {
char *tmp = qstrdup(QString("device.%1").arg(i).toUtf8().constData());
devicelist->addItem(bm.get(tmp));
delete[] tmp;
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++) {
+ for (int i = 1; i < video_list.count(); ++i) {
int vindex = video_list.at(i);
int aindex = 0;
if (i <= audio_list.count() -1) {
}
if (dialog.exec() == QDialog::Accepted) {
// import selected streams
- for (int i = 0; i < groupList.count(); i++) {
+ 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();