setZValue(2);
setRect(0, 0, (info.endPos - info.startPos).frames(fps) - 0.02, (double)(KdenliveSettings::trackheight() - 2));
setPos(info.startPos.frames(fps), (double)(info.track * KdenliveSettings::trackheight()) + 1);
+
+ // set speed independant info
+ m_speedIndependantInfo = m_info;
+ m_speedIndependantInfo.cropStart = GenTime((int)(m_info.cropStart.frames(m_fps) * m_speed), m_fps);
+ m_speedIndependantInfo.cropDuration = GenTime((int)(m_info.cropDuration.frames(m_fps) * m_speed), m_fps);
+
m_videoPix = KIcon("kdenlive-show-video").pixmap(QSize(16, 16));
m_audioPix = KIcon("kdenlive-show-audio").pixmap(QSize(16, 16));
return m_selectedEffect;
}
-void ClipItem::initEffect(QDomElement effect)
+void ClipItem::initEffect(QDomElement effect, int diff)
{
// the kdenlive_ix int is used to identify an effect in mlt's playlist, should
// not be changed
if (effect.attribute("kdenlive_ix").toInt() == 0)
effect.setAttribute("kdenlive_ix", QString::number(effectsCounter()));
- // init keyframes if required
+
+ if (effect.attribute("id") == "freeze" && diff > 0) {
+ EffectsList::setParameter(effect, "frame", QString::number(diff));
+ }
+
+ // Init parameter value & keyframes if required
QDomNodeList params = effect.elementsByTagName("parameter");
for (int i = 0; i < params.count(); i++) {
QDomElement e = params.item(i).toElement();
m_startPix = pix;
m_startThumbRequested = false;
update(r.left(), r.top(), width, pix.height());
+ if (m_clipType == IMAGE || m_clipType == TEXT) {
+ update(r.right() - width, r.top(), width, pix.height());
+ }
} else if (m_endThumbRequested && frame == (cropStart() + cropDuration()).frames(m_fps) - 1) {
m_endPix = pix;
m_endThumbRequested = false;
- update(r.right() - width, r.y(), width, pix.height());
+ update(r.right() - width, r.top(), width, pix.height());
}
}
QPen pen = painter->pen();
pen.setColor(QColor(255, 255, 255, 200));
pen.setStyle(Qt::DotLine);
- painter->setPen(pen);
+
for (; it != markers.end(); ++it) {
- pos = GenTime((int) ((*it).time().frames(m_fps) / m_speed + 0.5), m_fps) - cropStart();
+ pos = GenTime((int)((*it).time().frames(m_fps) / m_speed + 0.5), m_fps) - cropStart();
if (pos > GenTime()) {
if (pos > cropDuration()) break;
QLineF l(rect().x() + pos.frames(m_fps), rect().y(), rect().x() + pos.frames(m_fps), rect().bottom());
QLineF l2 = painter->matrix().map(l);
//framepos = scale * pos.frames(m_fps);
//QLineF l(framepos, 5, framepos, itemHeight - 5);
+ painter->setPen(pen);
painter->drawLine(l2);
if (KdenliveSettings::showmarkers()) {
framepos = rect().x() + pos.frames(m_fps);
GenTime pos;
for (int i = 0; i < markers.size(); i++) {
-
- pos = GenTime((int) (markers.at(i).frames(m_fps) / m_speed + 0.5), m_fps) - cropStart();
+
+ pos = GenTime((int)(markers.at(i).frames(m_fps) / m_speed + 0.5), m_fps) - cropStart();
if (pos > GenTime()) {
if (pos > cropDuration()) break;
else snaps.append(pos + startPos());
GenTime pos;
for (int i = 0; i < markers.size(); i++) {
- pos = GenTime((int) (markers.at(i).time().frames(m_fps) / m_speed + 0.5), m_fps) - cropStart();
+ pos = GenTime((int)(markers.at(i).time().frames(m_fps) / m_speed + 0.5), m_fps) - cropStart();
if (pos > GenTime()) {
if (pos > cropDuration()) break;
else snaps.append(CommentedTime(pos + startPos(), markers.at(i).comment()));
}
*/
-void ClipItem::resizeStart(int posx, double /*speed*/)
+void ClipItem::resizeStart(int posx)
{
const int min = (startPos() - cropStart()).frames(m_fps);
if (posx < min) posx = min;
if (posx == startPos().frames(m_fps)) return;
const int previous = cropStart().frames(m_fps);
- AbstractClipItem::resizeStart(posx, m_speed);
+ AbstractClipItem::resizeStart(posx);
+
+ // set speed independant info
+ m_speedIndependantInfo = m_info;
+ m_speedIndependantInfo.cropStart = GenTime((int)(m_info.cropStart.frames(m_fps) * m_speed), m_fps);
+ m_speedIndependantInfo.cropDuration = GenTime((int)(m_info.cropDuration.frames(m_fps) * m_speed), m_fps);
+
if ((int) cropStart().frames(m_fps) != previous) {
if (m_hasThumbs && KdenliveSettings::videothumbnails()) {
/*connect(m_clip->thumbProducer(), SIGNAL(thumbReady(int, QPixmap)), this, SLOT(slotThumbReady(int, QPixmap)));*/
}
}
-void ClipItem::resizeEnd(int posx, double /*speed*/)
+void ClipItem::resizeEnd(int posx)
{
const int max = (startPos() - cropStart() + maxDuration()).frames(m_fps);
if (posx > max && maxDuration() != GenTime()) posx = max;
if (posx == endPos().frames(m_fps)) return;
//kDebug() << "// NEW POS: " << posx << ", OLD END: " << endPos().frames(m_fps);
- const int previous = (int)(cropStart() + cropDuration()).frames(m_fps) - 1;
- AbstractClipItem::resizeEnd(posx, m_speed);
- const int current = (int)(cropStart() + cropDuration()).frames(m_fps) - 1;
- if (current != previous) {
+ const int previous = cropDuration().frames(m_fps);
+ AbstractClipItem::resizeEnd(posx);
+
+ // set speed independant info
+ m_speedIndependantInfo = m_info;
+ m_speedIndependantInfo.cropStart = GenTime((int)(m_info.cropStart.frames(m_fps) * m_speed), m_fps);
+ m_speedIndependantInfo.cropDuration = GenTime((int)(m_info.cropDuration.frames(m_fps) * m_speed), m_fps);
+
+ if ((int) cropDuration().frames(m_fps) != previous) {
if (m_hasThumbs && KdenliveSettings::videothumbnails()) {
/*connect(m_clip->thumbProducer(), SIGNAL(thumbReady(int, QPixmap)), this, SLOT(slotThumbReady(int, QPixmap)));*/
m_endThumbTimer.start(150);
m_strobe = strobe;
if (m_speed == 1.0) m_clipName = baseClip()->name();
else m_clipName = baseClip()->name() + " - " + QString::number(speed * 100, 'f', 0) + '%';
+ m_info.cropStart = GenTime((int)(m_speedIndependantInfo.cropStart.frames(m_fps) / m_speed + 0.5), m_fps);
+ m_info.cropDuration = GenTime((int)(m_speedIndependantInfo.cropDuration.frames(m_fps) / m_speed + 0.5), m_fps);
//update();
}
GenTime ClipItem::maxDuration() const
{
- return GenTime((int) (m_maxDuration.frames(m_fps) / m_speed + 0.5), m_fps);
+ return GenTime((int)(m_maxDuration.frames(m_fps) / m_speed + 0.5), m_fps);
}
-GenTime ClipItem::cropStart() const
+GenTime ClipItem::speedIndependantCropStart() const
{
- return GenTime((int) (m_info.originalcropStart.frames(m_fps) / m_speed + 0.5), m_fps);
+ return m_speedIndependantInfo.cropStart;
}
-GenTime ClipItem::cropDuration() const
+GenTime ClipItem::speedIndependantCropDuration() const
{
- return GenTime((int) (m_info.cropDuration.frames(m_fps) / m_speed + 0.5), m_fps);
+ return m_speedIndependantInfo.cropDuration;
}
-GenTime ClipItem::endPos() const
+
+const ItemInfo ClipItem::speedIndependantInfo() const
{
- return m_info.startPos + cropDuration();
+ return m_speedIndependantInfo;
}
//virtual