}
}
-void ClipManager::resetProducersList(const QList <Mlt::Producer *> prods)
+void ClipManager::resetProducersList(const QList <Mlt::Producer *> prods, bool displayRatioChanged)
{
for (int i = 0; i < m_clipList.count(); i++) {
if (m_clipList.at(i)->numReferences() > 0) {
- m_clipList.at(i)->clearProducers();
+ m_clipList.at(i)->deleteProducers(true);
}
}
QString id;
for (int i = 0; i < prods.count(); i++) {
id = prods.at(i)->get("id");
- kDebug() << "// // // REPLACE CLIP: " << id;
if (id.contains('_')) id = id.section('_', 0, 0);
DocClipBase *clip = getClipById(id);
if (clip) {
clip->setProducer(prods.at(i));
}
}
- emit checkAllClips();
+ emit checkAllClips(displayRatioChanged);
}
void ClipManager::slotAddClipList(const KUrl::List urls, const QString group, const QString &groupId)
void askForAudioThumb(const QString &id);
QString projectFolder() const;
void clearUnusedProducers();
- void resetProducersList(const QList <Mlt::Producer *> prods);
+ void resetProducersList(const QList <Mlt::Producer *> prods, bool displayRatioChanged);
void addFolder(const QString&, const QString&);
void deleteFolder(const QString&);
void clear();
void modifiedClip(const QString &);
void missingClip(const QString &);
void availableClip(const QString &);
- void checkAllClips();
+ void checkAllClips(bool displayRatioChanged);
};
#endif
return QString();
}
-void DocClipBase::clearProducers()
-{
- m_baseTrackProducers.clear();
-}
-
void DocClipBase::deleteProducers(bool clearThumbCreator)
{
- kDebug() << "// CLIP KILL PRODS ct: " << m_baseTrackProducers.count();
if (clearThumbCreator && m_thumbProd) m_thumbProd->clearProducer();
/*kDebug()<<"// CLIP KILL PRODS ct: "<<m_baseTrackProducers.count();
int max = m_baseTrackProducers.count();
const char *producerProperty(const char *name) const;
void setProducerProperty(const char *name, const char *data);
void resetProducerProperty(const char *name);
- void clearProducers();
void deleteProducers(bool clearThumbCreator = true);
/** Set default play zone for clip monitor */
emit progressInfo(QString(), -1);
}*/
-void KdenliveDoc::checkProjectClips()
+void KdenliveDoc::checkProjectClips(bool displayRatioChanged)
{
if (m_render == NULL) return;
- m_clipManager->resetProducersList(m_render->producersList());
+ m_clipManager->resetProducersList(m_render->producersList(), displayRatioChanged);
}
Render *KdenliveDoc::renderer()
/** @brief Sets the document as modified or up to date.
* @param mod (optional) true if the document has to be saved */
void setModified(bool mod = true);
- void checkProjectClips();
+ void checkProjectClips(bool displayRatioChanged = false);
private slots:
void slotAutoSave();
void MainWindow::slotUpdateProjectProfile(const QString &profile)
{
- double dar = m_activeDocument->dar();
-
// Recreate the stopmotion widget if profile changes
if (m_stopmotion) {
delete m_stopmotion;
m_projectList->updateProjectFormat(m_activeDocument->timecode());
if (m_renderWidget) m_renderWidget->setProfile(m_activeDocument->mltProfile());
m_timelineArea->setTabText(m_timelineArea->currentIndex(), m_activeDocument->description());
- //m_activeDocument->clipManager()->resetProducersList(m_projectMonitor->render->producersList());
- if (dar != m_activeDocument->dar()) m_projectList->reloadClipThumbnails();
if (updateFps) m_activeTimeline->updateProjectFps();
m_activeDocument->setModified(true);
m_commandStack->activeStack()->clear();
disconnect(m_projectList, SIGNAL(projectModified()), m_activeDocument, SLOT(setModified()));
disconnect(m_projectList, SIGNAL(updateProfile(const QString &)), this, SLOT(slotUpdateProjectProfile(const QString &)));
- disconnect(m_projectMonitor->render, SIGNAL(refreshDocumentProducers()), m_activeDocument, SLOT(checkProjectClips()));
+ disconnect(m_projectMonitor->render, SIGNAL(refreshDocumentProducers(bool)), m_activeDocument, SLOT(checkProjectClips(bool)));
disconnect(m_activeDocument, SIGNAL(guidesUpdated()), this, SLOT(slotGuidesUpdated()));
disconnect(m_activeDocument, SIGNAL(addProjectClip(DocClipBase *, bool)), m_projectList, SLOT(slotAddClip(DocClipBase *, bool)));
connect(m_projectMonitor, SIGNAL(zoneUpdated(QPoint)), doc, SLOT(setModified()));
connect(m_clipMonitor, SIGNAL(zoneUpdated(QPoint)), doc, SLOT(setModified()));
connect(m_projectMonitor, SIGNAL(durationChanged(int)), trackView, SLOT(setDuration(int)));
- connect(m_projectMonitor->render, SIGNAL(refreshDocumentProducers()), doc, SLOT(checkProjectClips()));
+ connect(m_projectMonitor->render, SIGNAL(refreshDocumentProducers(bool)), doc, SLOT(checkProjectClips(bool)));
connect(doc, SIGNAL(addProjectClip(DocClipBase *, bool)), m_projectList, SLOT(slotAddClip(DocClipBase *, bool)));
connect(doc, SIGNAL(resetProjectList()), m_projectList, SLOT(slotResetProjectList()));
if (trackPlaylist.get_clip(i)) mlt_producer_close(trackPlaylist.get_clip(i)->get_parent());
}
mlt_playlist_close(trackPlaylist.get_playlist());
- //trackPlaylist.clear();
}
}
delete field;
monitorItemEditing(true);
}
-void ProjectList::updateAllClips()
+void ProjectList::updateAllClips(bool displayRatioChanged)
{
m_listView->setSortingEnabled(false);
- kDebug() << "// UPDATE ALL CLPY";
QTreeWidgetItemIterator it(m_listView);
DocClipBase *clip;
if ((*it)->type() == PROJECTSUBCLIPTYPE) {
// subitem
SubProjectItem *sub = static_cast <SubProjectItem *>(*it);
- if (sub->data(0, Qt::DecorationRole).isNull()) {
+ if (displayRatioChanged || sub->data(0, Qt::DecorationRole).isNull()) {
item = static_cast <ProjectItem *>((*it)->parent());
requestClipThumbnail(item->clipId() + '#' + QString::number(sub->zone().x()));
}
else if (!clip->isPlaceHolder())
item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsDropEnabled);
} else {
- if (item->data(0, Qt::DecorationRole).isNull())
+ if (displayRatioChanged || item->data(0, Qt::DecorationRole).isNull())
requestClipThumbnail(clip->getId());
if (item->data(0, DurationRole).toString().isEmpty()) {
item->changeDuration(item->referencedClip()->producer()->get_playtime());
if (m_listView->isEnabled())
monitorItemEditing(true);
m_listView->setSortingEnabled(true);
- if (m_infoQueue.isEmpty())
- slotProcessNextThumbnail();
+ if (m_infoQueue.isEmpty()) {
+ slotProcessNextThumbnail();
+ }
}
// static
connect(m_doc->clipManager(), SIGNAL(modifiedClip(const QString &)), this, SLOT(slotModifiedClip(const QString &)));
connect(m_doc->clipManager(), SIGNAL(missingClip(const QString &)), this, SLOT(slotMissingClip(const QString &)));
connect(m_doc->clipManager(), SIGNAL(availableClip(const QString &)), this, SLOT(slotAvailableClip(const QString &)));
- connect(m_doc->clipManager(), SIGNAL(checkAllClips()), this, SLOT(updateAllClips()));
+ connect(m_doc->clipManager(), SIGNAL(checkAllClips(bool)), this, SLOT(updateAllClips(bool)));
}
QList <DocClipBase*> ProjectList::documentClipList() const
}
}
-void ProjectList::reloadClipThumbnails()
-{
- m_thumbnailQueue.clear();
- QTreeWidgetItemIterator it(m_listView);
- while (*it) {
- if ((*it)->type() != PROJECTCLIPTYPE) {
- // subitem
- ++it;
- continue;
- }
- m_thumbnailQueue << ((ProjectItem *)(*it))->clipId();
- ++it;
- }
- QTimer::singleShot(300, this, SLOT(slotProcessNextThumbnail()));
-}
void ProjectList::requestClipThumbnail(const QString id)
{
QTreeWidgetItem *item = getAnyItemById(clipId);
if (item)
slotRefreshClipThumbnail(item, update);
- else
+ else {
slotProcessNextThumbnail();
+ }
}
void ProjectList::slotRefreshClipThumbnail(QTreeWidgetItem *it, bool update)
}
if (update)
emit projectModified();
-
slotProcessNextThumbnail();
}
}
void setupGeneratorMenu(QMenu *addMenu, QMenu *transcodeMenu, QMenu *inTimelineMenu);
QString currentClipUrl() const;
KUrl::List getConditionalUrls(const QString &condition) const;
- void reloadClipThumbnails();
QDomDocument generateTemplateXml(QString data, const QString &replaceString);
void cleanup();
void trashUnusedClips();
public slots:
void setDocument(KdenliveDoc *doc);
- void updateAllClips();
+ void updateAllClips(bool displayRatioChanged);
void slotReplyGetImage(const QString &clipId, const QPixmap &pix);
void slotReplyGetFileProperties(const QString &clipId, Mlt::Producer *producer, const QMap < QString, QString > &properties, const QMap < QString, QString > &metadata, bool replace, bool selectClip);
void slotAddClip(DocClipBase *clip, bool getProperties);
int Render::resetProfile(const QString profileName)
{
+ QString scene = sceneList();
if (m_mltConsumer) {
if (m_externalConsumer == KdenliveSettings::external_display()) {
if (KdenliveSettings::external_display() && m_activeProfile == profileName) return 1;
delete m_mltConsumer;
m_mltConsumer = NULL;
}
- QString scene = sceneList();
int pos = 0;
double current_fps = m_mltProfile->fps();
+ double current_dar = m_mltProfile->dar();
delete m_blackClip;
m_blackClip = NULL;
m_mltProducer = NULL;
buildConsumer(profileName);
double new_fps = m_mltProfile->fps();
+ double new_dar = m_mltProfile->dar();
if (current_fps != new_fps) {
// fps changed, we must update the scenelist positions
scene = updateSceneListFps(current_fps, new_fps, scene);
//kDebug() << "//RESET WITHSCENE: " << scene;
setSceneList(scene, pos);
// producers have changed (different profile), so reset them...
- emit refreshDocumentProducers();
+ emit refreshDocumentProducers(new_dar != current_dar);
/*Mlt::Producer *producer = new Mlt::Producer(*m_mltProfile , "xml-string", scene.toUtf8().constData());
m_mltProducer = producer;
m_blackClip = new Mlt::Producer(*m_mltProfile , "colour", "black");
resource = mlt_properties_get(properties, "mlt_service");
}
+
for (int trackNb = tractor.count() - 1; trackNb >= 0; --trackNb) {
Mlt::Producer trackProducer(tractor.track(trackNb));
Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service());
delete tt;
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++) {
Mlt::Producer *c = trackPlaylist.get_clip(i);
Mlt::Producer *nprod = new Mlt::Producer(c->get_parent());
if (nprod) {
- if (!nprod->is_blank() && !ids.contains(nprod->get("id"))) {
+ QString prodId = nprod->get("id");
+ if (!prodId.startsWith("slowmotion") && !prodId.isEmpty() && !nprod->is_blank() && !ids.contains(prodId)) {
ids.append(nprod->get("id"));
prods.append(nprod);
} else delete nprod;
* @param durationError Should be set to true if the proxy failed because it has not same length as original clip
*/
void removeInvalidProxy(const QString &id, bool durationError);
- void refreshDocumentProducers();
+ void refreshDocumentProducers(bool displayRatioChanged);
/** @brief A frame's image has to be shown.
*