}
updateSnapPoints(m_dragItem);
//kDebug()<<pos;
- QGraphicsView::mousePressEvent(event);
+ //QGraphicsView::mousePressEvent(event);
}
void CustomTrackView::dragEnterEvent ( QDragEnterEvent * event )
m_document->renderer()->mltResizeClipStart(m_tracksCount - m_dragItem->track(), GenTime(m_dragItem->endPos(), 25), GenTime(m_dragItem->startPos(), 25), GenTime(m_startPos.x(), 25), GenTime(m_dragItem->cropStart(), 25), GenTime(m_dragItem->cropStart(), 25) + GenTime(m_dragItem->endPos(), 25) - GenTime(m_dragItem->startPos(), 25));
m_commandStack->push(command);
+ m_document->renderer()->doRefresh();
}
else if (m_operationMode == RESIZEEND) {
// resize end
m_document->renderer()->mltResizeClipEnd(m_tracksCount - m_dragItem->track(), GenTime(m_dragItem->startPos(), 25), GenTime(m_dragItem->cropStart(), 25), GenTime(m_dragItem->cropStart(), 25) + GenTime(m_dragItem->endPos(), 25) - GenTime(m_dragItem->startPos(), 25));
m_commandStack->push(command);
+ m_document->renderer()->doRefresh();
}
m_operationMode = NONE;
m_dragItem = NULL;
m_document->updateClip(item->baseClip()->getId());
delete item;
m_document->renderer()->mltRemoveClip(m_tracksCount - track, GenTime(startpos, 25));
+ m_document->renderer()->doRefresh();
}
void CustomTrackView::addClip ( QDomElement xml, int clipId, int track, int startpos, const QRectF &rect, int duration )
baseclip->addReference();
m_document->updateClip(baseclip->getId());
m_document->renderer()->mltInsertClip(m_tracksCount - track, GenTime(startpos, 25), xml);
+ m_document->renderer()->doRefresh();
}
void CustomTrackView::moveClip ( const QPointF &startPos, const QPointF &endPos )
m_document->renderer()->mltResizeClipEnd(m_tracksCount - item->track(), GenTime(item->startPos(), 25), GenTime(item->cropStart(), 25), GenTime(item->cropStart(), 25) + GenTime(endPos.x(), 25) - GenTime(item->startPos(), 25));
item->resizeEnd(endPos.x(), m_scale);
}
+ m_document->renderer()->doRefresh();
}
double CustomTrackView::getSnapPointForPos(double pos)
}
}
-Render::Render(const QString & rendererName, int winid, int extid, QWidget *parent):QObject(parent), m_name(rendererName), m_mltConsumer(NULL), m_mltProducer(NULL), m_mltTextProducer(NULL), m_sceneList(QDomDocument()), m_winid(-1), m_framePosition(0), m_generateScenelist(false), isBlocked(true)
+Render::Render(const QString & rendererName, int winid, int extid, QWidget *parent):QObject(parent), m_name(rendererName), m_mltConsumer(NULL), m_mltProducer(NULL), m_mltTextProducer(NULL), m_sceneList(QDomDocument()), m_winid(-1), m_framePosition(0), m_generateScenelist(false), m_isBlocked(true)
{
kDebug()<<"////////// USING PROFILE: "<<qstrdup(KdenliveSettings::current_profile().toUtf8());
m_mltProfile = new Mlt::Profile((char*) qstrdup(KdenliveSettings::current_profile().toUtf8()));
refresh();
}
}
- isBlocked = false;
+ m_isBlocked = false;
}
void Render::clear()
m_mltConsumer->stop();
}
kDebug()<<"///////////// RENDER STOP2-------";
- isBlocked = true;
+ m_isBlocked = true;
if (m_mltProducer) {
m_mltProducer->set_speed(0.0);
refreshTimer->start( 200 );
}
+void Render::doRefresh()
+{
+ // Use a Timer so that we don't refresh too much
+ refresh();
+}
+
void Render::refresh()
{
- if (!m_mltProducer)
+ if (!m_mltProducer || m_isBlocked)
return;
refreshTimer->stop();
if (m_mltConsumer) {
kDebug()<<"PLAYLIST BROKEN, CANNOT INSERT CLIP //////";
return;
}
+ m_isBlocked = true;
Mlt::Service service(parentProd.get_service());
Mlt::Tractor tractor(service);
tractor.multitrack()->refresh();
tractor.refresh();
if (track != 0) mltCheckLength();
- double duration = Mlt::Producer(trackPlaylist.get_producer()).get_playtime();
- //kDebug()<<"// + +INSERTING CLIP: "<<resource<<" AT: "<<position.frames(m_fps)<<" on track: "<<track<<", DURATION: "<<duration;
-
-
+ m_isBlocked = false;
}
void Render::mltCutClip(int track, GenTime position)
{
+ m_isBlocked = true;
Mlt::Service service(m_mltProducer->parent().get_service());
- if (service.type() == playlist_type) kDebug()<<"// PLAYLIST TYPE";
- if (service.type() == tractor_type) kDebug()<<"// TRACOT TYPE";
- if (service.type() == multitrack_type) kDebug()<<"// MULTITRACK TYPE";
- if (service.type() == producer_type) kDebug()<<"// PROD TYPE";
-
Mlt::Tractor tractor(service);
Mlt::Producer trackProducer(tractor.track(track));
Mlt::Playlist trackPlaylist(( mlt_playlist ) trackProducer.get_service());
trackPlaylist.split_at(position.frames(m_fps));
trackPlaylist.consolidate_blanks(0);
kDebug()<<"/ / / /CUTTING CLIP AT: "<<position.frames(m_fps);
+ m_isBlocked = false;
}
void Render::mltRemoveClip(int track, GenTime position)
{
+ m_isBlocked = true;
Mlt::Service service(m_mltProducer->parent().get_service());
- if (service.type() == playlist_type) kDebug()<<"// PLAYLIST TYPE";
- if (service.type() == tractor_type) kDebug()<<"// TRACOT TYPE";
- if (service.type() == multitrack_type) kDebug()<<"// MULTITRACK TYPE";
- if (service.type() == producer_type) kDebug()<<"// PROD TYPE";
-
Mlt::Tractor tractor(service);
Mlt::Producer trackProducer(tractor.track(track));
Mlt::Playlist trackPlaylist(( mlt_playlist ) trackProducer.get_service());
trackPlaylist.consolidate_blanks(0);
if (track != 0) mltCheckLength();
//emit durationChanged();
+ m_isBlocked = false;
}
void Render::mltRemoveEffect(int track, GenTime position, QString id, QString tag, int index)
{
+
Mlt::Service service(m_mltProducer->parent().get_service());
Mlt::Tractor tractor(service);
kDebug()<<" / / / CANNOT FIND CLIP TO REMOVE EFFECT";
return;
}
+ m_isBlocked = true;
Mlt::Service clipService(clip->get_service());
if (tag.startsWith("ladspa")) tag = "ladspa";
kDebug()<<"WARINIG, FILTER "<<id<<" NOT FOUND!!!!!";
}
}
+ m_isBlocked = false;
refresh();
}
return;
}
Mlt::Service clipService(clip->get_service());
-
+ m_isBlocked = true;
// create filter
kDebug()<<" / / INSERTING EFFECT: "<<id;
if (tag.startsWith("ladspa")) tag = "ladspa";
// attach filter to the clip
clipService.attach(*filter);
delete[] filterId;
+ m_isBlocked = false;
refresh();
}
mltAddEffect(track, position, id, tag, args);
return;
}
-
+ m_isBlocked = true;
// create filter
Mlt::Service service(m_mltProducer->parent().get_service());
}
if (!filter) {
kDebug()<<"WARINIG, FILTER "<<id<<" NOT FOUND!!!!!";
+ m_isBlocked = false;
return;
}
delete[] name;
delete[] value;
}
+ m_isBlocked = false;
refresh();
}
void Render::mltResizeClipEnd(int track, GenTime pos, GenTime in, GenTime out)
{
+ m_isBlocked = true;
Mlt::Service service(m_mltProducer->parent().get_service());
Mlt::Tractor tractor(service);
tractor.multitrack()->refresh();
tractor.refresh();
if (track != 0) mltCheckLength();
-
+ m_isBlocked = false;
}
void Render::mltChangeTrackState(int track, bool mute, bool blind)
void Render::mltResizeClipStart(int track, GenTime pos, GenTime moveEnd, GenTime moveStart, GenTime in, GenTime out)
{
+ m_isBlocked = true;
Mlt::Service service(m_mltProducer->parent().get_service());
- if (service.type() == playlist_type) kDebug()<<"// PLAYLIST TYPE";
- if (service.type() == tractor_type) kDebug()<<"// TRACOT TYPE";
- if (service.type() == multitrack_type) kDebug()<<"// MULTITRACK TYPE";
- if (service.type() == producer_type) kDebug()<<"// PROD TYPE";
-
int moveFrame = (moveEnd - moveStart).frames(m_fps);
Mlt::Tractor tractor(service);
else trackPlaylist.resize_clip(blankIndex, 0, blankLength + moveFrame -1);
}
trackPlaylist.consolidate_blanks(0);
-
+ m_isBlocked = false;
kDebug()<<"-----------------\n"<<"CLIP 0: "<<trackPlaylist.clip_start(0)<<", LENGT: "<<trackPlaylist.clip_length(0);
kDebug()<<"CLIP 1: "<<trackPlaylist.clip_start(1)<<", LENGT: "<<trackPlaylist.clip_length(1);
kDebug()<<"CLIP 2: "<<trackPlaylist.clip_start(2)<<", LENGT: "<<trackPlaylist.clip_length(2);
void Render::mltMoveClip(int startTrack, int endTrack, int moveStart, int moveEnd)
{
- kDebug()<<"RENDER MOVE CLIP: "<<startTrack<<"-"<<endTrack<<"-"<<moveStart<<"-"<<moveEnd;
- m_mltConsumer->set("refresh", 0);
+ m_isBlocked = true;
+ //m_mltConsumer->set("refresh", 0);
Mlt::Service service(m_mltProducer->parent().get_service());
Mlt::Tractor tractor(service);
Mlt::Producer clipProducer(trackPlaylist.replace_with_blank(clipIndex));
trackPlaylist.consolidate_blanks(0);
- mlt_events_block( MLT_PRODUCER_PROPERTIES(clipProducer.get_producer()), NULL );
+ mlt_events_block( MLT_PRODUCER_PROPERTIES(trackProducer.get_producer()), NULL );
if (endTrack == startTrack) {
if (!trackPlaylist.is_blank_at(moveEnd)) {
}
mltCheckLength();
- mlt_events_unblock( MLT_PRODUCER_PROPERTIES(clipProducer.get_producer()), NULL );
+ mlt_events_unblock( MLT_PRODUCER_PROPERTIES(trackProducer.get_producer()), NULL );
+ m_isBlocked = false;
+ m_mltConsumer->set("refresh", 1);
}
void Render::mltMoveTransition(QString type, int startTrack, int trackOffset, GenTime oldIn, GenTime oldOut, GenTime newIn, GenTime newOut)
{
+ m_isBlocked = true;
m_mltConsumer->set("refresh", 0);
mlt_service serv = m_mltProducer->parent().get_service();
mlt_type = mlt_properties_get( properties, "mlt_type" );
resource = mlt_properties_get( properties, "mlt_service" );
}
+ m_isBlocked = false;
}
void Render::mltAddTransition(QString tag, int a_track, int b_track, GenTime in, GenTime out, QMap <QString, QString> args)
{
+ m_isBlocked = true;
Mlt::Service service(m_mltProducer->parent().get_service());
Mlt::Tractor tractor(service);
// attach filter to the clip
field->plant_transition(*transition, a_track, b_track);
delete[] transId;
+ m_isBlocked = false;
refresh();
}