m_properties.insert(attributes.item(i).nodeName(), attributes.item(i).nodeValue());
}
+ if (xml.hasAttribute("cutzones")) {
+ QStringList cuts = xml.attribute("cutzones").split(";", QString::SkipEmptyParts);
+ for (int i = 0; i < cuts.count(); i++) {
+ QString z = cuts.at(i);
+ addCutZone(z.section('-', 0, 0).toInt(), z.section('-', 1, 1).toInt(), z.section('-', 2, 2));
+ }
+ }
+
KUrl url = KUrl(xml.attribute("resource"));
if (!m_properties.contains("file_hash") && !url.isEmpty()) getFileHash(url.path());
//if (!url.isEmpty() && QFile::exists(url.path()))
{
m_thumbProd = new KThumb(clipManager, url, m_id, m_properties.value("file_hash"));
- if (m_clipType == AV || m_clipType == AUDIO) slotCreateAudioTimer();
+ if (m_clipType == AV || m_clipType == AUDIO || m_clipType == PLAYLIST) slotCreateAudioTimer();
}
//kDebug() << "type is video" << (m_clipType == AV) << " " << m_clipType;
}
void DocClipBase::askForAudioThumbs()
{
- if (m_thumbProd) m_thumbProd->askForAudioThumbs(getId());
+ if (m_thumbProd && m_audioTimer) slotGetAudioThumbs();
}
void DocClipBase::slotClearAudioCache()
m_clipType = type;
m_properties.insert("type", QString::number((int) type));
- if (m_thumbProd && m_audioTimer == NULL && (m_clipType == AV || m_clipType == AUDIO))
+ if (m_thumbProd && m_audioTimer == NULL && (m_clipType == AV || m_clipType == AUDIO || m_clipType == PLAYLIST))
slotCreateAudioTimer();
}
if (!i.value().isEmpty()) clip.setAttribute(i.key(), i.value());
}
doc.appendChild(clip);
+ if (!m_cutZones.isEmpty()) {
+ QStringList cuts;
+ for (int i = 0; i < m_cutZones.size(); i++) {
+ CutZoneInfo info = m_cutZones.at(i);
+ cuts << QString::number(info.zone.x()) + "-" + QString::number(info.zone.y()) + "-" + info.description;
+ }
+ clip.setAttribute("cutzones", cuts.join(";"));
+ }
//kDebug() << "/// CLIP XML: " << doc.toString();
return doc.documentElement();
}
if (it == 0) return GenTime();
else if (it == m_snapMarkers.count() - 1 && m_snapMarkers.at(it).time() < currTime)
return m_snapMarkers.at(it).time();
- else return m_snapMarkers.at(it -1).time();
+ else return m_snapMarkers.at(it - 1).time();
}
GenTime DocClipBase::findNextSnapMarker(const GenTime & currTime)
deleteProducers();
}
QString id = producer->get("id");
- kDebug() << "// set prod: " << id;
if (id.contains('_')) {
// this is a subtrack producer, insert it at correct place
id = id.section('_', 1);
bool DocClipBase::slotGetAudioThumbs()
{
if (m_thumbProd == NULL) return false;
- if (!KdenliveSettings::audiothumbnails()) {
+ if (!KdenliveSettings::audiothumbnails() || m_audioTimer == NULL) {
if (m_audioTimer != NULL) m_audioTimer->stop();
return false;
}
if (m_audioThumbCreated) {
- if (m_audioTimer != NULL) m_audioTimer->stop();
+ m_audioTimer->stop();
return false;
}
- if (m_audioTimer != NULL)
- m_audioTimer->start(1500);
+ m_audioTimer->start(1500);
double lengthInFrames = duration().frames(KdenliveSettings::project_fps());
m_thumbProd->getAudioThumbs(2, 0, lengthInFrames /*must be number of frames*/, 20);
return true;
return m_placeHolder;
}
+void DocClipBase::addCutZone(int in, int out, QString desc)
+{
+ CutZoneInfo info;
+ info.zone = QPoint(in, out);
+ info.description = desc;
+ for (int i = 0; i < m_cutZones.count(); i++)
+ if (m_cutZones.at(i).zone == info.zone) {
+ return;
+ }
+ m_cutZones.append(info);
+}
+
+bool DocClipBase::hasCutZone(QPoint p) const
+{
+ for (int i = 0; i < m_cutZones.count(); i++)
+ if (m_cutZones.at(i).zone == p) return true;
+ return false;
+}
+
+
+void DocClipBase::removeCutZone(int in, int out)
+{
+ QPoint p(in, out);
+ for (int i = 0; i < m_cutZones.count(); i++) {
+ if (m_cutZones.at(i).zone == p) {
+ m_cutZones.removeAt(i);
+ i--;
+ }
+ }
+}
+
+void DocClipBase::updateCutZone(int oldin, int oldout, int in, int out, QString desc)
+{
+ QPoint old(oldin, oldout);
+ for (int i = 0; i < m_cutZones.size(); ++i) {
+ if (m_cutZones.at(i).zone == old) {
+ CutZoneInfo info;
+ info.zone = QPoint(in, out);
+ info.description = desc;
+ m_cutZones.replace(i, info);
+ break;
+ }
+ }
+}
+
+QList <CutZoneInfo> DocClipBase::cutZones() const
+{
+ return m_cutZones;
+}
+