From 7931e3703f53c9eb89490b3d209c31674989cf95 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Sun, 10 Feb 2008 21:39:42 +0000 Subject: [PATCH] insert & move timeline clips svn path=/branches/KDE4/; revision=1831 --- src/addtimelineclipcommand.cpp | 2 +- src/customruler.cpp | 4 +- src/customtrackview.cpp | 21 ++++++--- src/customtrackview.h | 2 +- src/kdenlivedoc.cpp | 12 +++-- src/monitor.cpp | 1 + src/renderer.cpp | 82 +++------------------------------- src/renderer.h | 8 ---- src/trackview.cpp | 2 + 9 files changed, 33 insertions(+), 101 deletions(-) diff --git a/src/addtimelineclipcommand.cpp b/src/addtimelineclipcommand.cpp index 27504a0b..a5c71644 100644 --- a/src/addtimelineclipcommand.cpp +++ b/src/addtimelineclipcommand.cpp @@ -32,7 +32,7 @@ void AddTimelineClipCommand::undo() { // kDebug()<<"---- undoing action"; m_doIt = true; - if (m_doIt) m_view->deleteClip(m_clipRect); + if (m_doIt) m_view->deleteClip(m_clipTrack, m_clipPos, m_clipRect); } // virtual void AddTimelineClipCommand::redo() diff --git a/src/customruler.cpp b/src/customruler.cpp index 8081f9cc..478abcfc 100644 --- a/src/customruler.cpp +++ b/src/customruler.cpp @@ -100,7 +100,6 @@ void CustomRuler::mouseMoveEvent ( QMouseEvent * event ) { int pos = event->x(); slotMoveCursor( pos, true ); - kDebug()<pos()).x() - m_dragItem->startPos() * m_scale; m_operationMode = m_dragItem->operationMode(item->mapFromScene(mapToScene(event->pos())), m_scale); - if (m_operationMode == MOVE || m_operationMode == RESIZESTART) m_startPos = QPointF(m_dragItem->startPos(), m_dragItem->track()); - else if (m_operationMode == RESIZEEND) m_startPos = QPointF(m_dragItem->endPos(), m_dragItem->track()); + if (m_operationMode == MOVE || m_operationMode == RESIZESTART) + m_startPos = QPointF(m_dragItem->startPos(), m_dragItem->track()); + else if (m_operationMode == RESIZEEND) + m_startPos = QPointF(m_dragItem->endPos(), m_dragItem->track()); kDebug()<<"//////// ITEM CLICKED: "<xml(), m_dropItem->track(), m_dropItem->startPos(), m_dropItem->rect(), m_dropItem->duration(), false); m_commandStack->push(command); - m_document->renderer()->mltInsertClip(m_tracksCount - m_dropItem->track() + 1, GenTime(m_dropItem->startPos(), 25), m_dropItem->xml()); + kDebug()<<"IIIIIIIIIIIIIIIIIIIIIIII TRAX CNT: "<track(); + m_document->renderer()->mltInsertClip(m_tracksCount - m_dropItem->track(), GenTime(m_dropItem->startPos(), 25), m_dropItem->xml()); } m_dropItem = NULL; } @@ -415,6 +418,7 @@ void CustomTrackView::mouseReleaseEvent ( QMouseEvent * event ) // move clip MoveClipCommand *command = new MoveClipCommand(this, m_startPos, QPointF(m_dragItem->startPos(), m_dragItem->track()), false); m_commandStack->push(command); + m_document->renderer()->mltMoveClip(m_tracksCount - m_startPos.y(), m_tracksCount - m_dragItem->track(), m_startPos.x(), m_dragItem->startPos()); } else if (m_operationMode == RESIZESTART) { // resize start @@ -430,7 +434,7 @@ void CustomTrackView::mouseReleaseEvent ( QMouseEvent * event ) m_dragItem = NULL; } -void CustomTrackView::deleteClip ( const QRectF &rect ) +void CustomTrackView::deleteClip (int track, int startpos, const QRectF &rect ) { ClipItem *item = (ClipItem *) scene()->itemAt(rect.x() + 1, rect.y() + 1); if (!item) { @@ -438,6 +442,7 @@ void CustomTrackView::deleteClip ( const QRectF &rect ) return; } delete item; + m_document->renderer()->mltRemoveClip(m_tracksCount - track, GenTime(startpos, 25)); } void CustomTrackView::addClip ( QDomElement xml, int track, int startpos, const QRectF &rect, int duration ) @@ -445,6 +450,7 @@ void CustomTrackView::addClip ( QDomElement xml, int track, int startpos, const QRect r(startpos * m_scale, 50 * track, duration * m_scale, 49); ClipItem *item = new ClipItem(xml, track, startpos, r, duration); scene()->addItem(item); + m_document->renderer()->mltInsertClip(m_tracksCount - track, GenTime(startpos, 25), xml); } void CustomTrackView::moveClip ( const QPointF &startPos, const QPointF &endPos ) @@ -456,6 +462,7 @@ void CustomTrackView::moveClip ( const QPointF &startPos, const QPointF &endPos } kDebug()<<"----------------  Move CLIP FROM: "<moveTo(endPos.x(), m_scale, (endPos.y() - startPos.y()) * 50, endPos.y()); + m_document->renderer()->mltMoveClip(m_tracksCount - startPos.y(), m_tracksCount - endPos.y(), startPos.x(), endPos.x()); } void CustomTrackView::resizeClip ( const QPointF &startPos, const QPointF &endPos, bool resizeClipStart ) @@ -548,13 +555,13 @@ void CustomTrackView::setScale(double scaleFactor) void CustomTrackView::drawBackground ( QPainter * painter, const QRectF & rect ) { QColor base = palette().button().color(); - painter->setPen(base); + //painter->setPen(base); painter->setClipRect(rect); painter->drawLine(0, 0, rect.width(), 0); for (uint i = 0; i < m_tracksCount;i++) { - painter->drawLine(0, 50 * (i+1), width(), 50 * (i+1)); - //painter->drawText(QRectF(10, 50 * i, 100, 50 * i + 49), Qt::AlignLeft, i18n(" Track ") + QString::number(i)); + painter->drawLine(0, 50 * (i+1), width(), 50 * (i+1)); + painter->drawText(QRectF(10, 50 * i, 100, 50 * i + 49), Qt::AlignLeft, i18n(" Track ") + QString::number(i + 1)); } int lowerLimit = 50 * m_tracksCount; if (height() > lowerLimit) diff --git a/src/customtrackview.h b/src/customtrackview.h index 897d0307..d0386b39 100644 --- a/src/customtrackview.h +++ b/src/customtrackview.h @@ -46,7 +46,7 @@ class CustomTrackView : public QGraphicsView void moveClip ( const QPointF &startPos, const QPointF &endPos ); void resizeClip ( const QPointF &startPos, const QPointF &endPos, bool resizeClipStart ); void addClip ( QDomElement xml, int track, int startpos, const QRectF &rect, int duration); - void deleteClip ( const QRectF &rect ); + void deleteClip ( int track, int startpos, const QRectF &rect ); void setDuration(int duration); void setScale(double scaleFactor); diff --git a/src/kdenlivedoc.cpp b/src/kdenlivedoc.cpp index edf64942..a04b6145 100644 --- a/src/kdenlivedoc.cpp +++ b/src/kdenlivedoc.cpp @@ -66,24 +66,28 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, double fps, int width, int height, QWi QDomElement tractor = m_document.createElement("tractor"); QDomElement multitrack = m_document.createElement("multitrack"); QDomElement playlist = m_document.createElement("playlist"); + QDomElement producer = m_document.createElement("producer"); + /*producer.setAttribute("mlt_service", "colour"); + producer.setAttribute("colour", "red"); + playlist.appendChild(producer);*/ multitrack.appendChild(playlist); QDomElement playlist1 = m_document.createElement("playlist"); playlist1.setAttribute("id", "playlist1"); + playlist1.setAttribute("hide", "video"); multitrack.appendChild(playlist1); QDomElement playlist2 = m_document.createElement("playlist"); playlist2.setAttribute("id", "playlist2"); + playlist2.setAttribute("hide", "video"); multitrack.appendChild(playlist2); QDomElement playlist3 = m_document.createElement("playlist"); multitrack.appendChild(playlist3); playlist3.setAttribute("id", "playlist3"); QDomElement playlist4 = m_document.createElement("playlist"); - playlist4.setAttribute("hide", "video"); multitrack.appendChild(playlist4); - playlist1.setAttribute("id", "playlist4"); + playlist4.setAttribute("id", "playlist4"); QDomElement playlist5 = m_document.createElement("playlist"); - playlist5.setAttribute("hide", "video"); multitrack.appendChild(playlist5); - playlist1.setAttribute("id", "playlist5"); + playlist5.setAttribute("id", "playlist5"); tractor.appendChild(multitrack); doc.appendChild(tractor); diff --git a/src/monitor.cpp b/src/monitor.cpp index 88f902d4..3d70ff01 100644 --- a/src/monitor.cpp +++ b/src/monitor.cpp @@ -85,6 +85,7 @@ void Monitor::slotSeek(int pos) int realPos = ((double) pos) / m_scale; render->seekToFrame(realPos); m_position = realPos; + emit renderPosition(m_position); ui.monitor_time->setText(m_monitorManager->timecode().getTimecodeFromFrames(m_position)); } diff --git a/src/renderer.cpp b/src/renderer.cpp index 4627dff4..19fe51c1 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -47,7 +47,8 @@ static void consumer_frame_show(mlt_consumer, Render * self, mlt_frame frame_ptr if (mlt_properties_get_double( MLT_FRAME_PROPERTIES( frame_ptr ), "_speed" ) == 0.0) { self->emitConsumerStopped(); } - else { + else + { self->emitFrameNumber(mlt_frame_get_position(frame_ptr)); } } @@ -117,72 +118,6 @@ void Render::closeMlt() //delete m_osdInfo; } - - - - -/** Wraps the VEML command of the same name; requests that the renderer -should create a video window. If show is true, then the window should be -displayed, otherwise it should be hidden. Render will emit the signal -replyCreateVideoXWindow() once the renderer has replied. */ - -void Render::createVideoXWindow(WId winid, WId externalMonitor) -{ - return; - if (m_mltConsumer) { - delete m_mltConsumer; - } - - kDebug()<<"///////// INIT MONITOR WID"; - //Mlt::Profile profile("dv_pal");//hdv_1080_50i"); - //m_profile = profile; - //Mlt::Producer *producer = new Mlt::Producer( profile, "/home/one/Video002.mp4" ); - Mlt::Consumer *consumer = new Mlt::Consumer( *m_mltProfile , "sdl_preview"); - //m_mltProducer = producer; - m_mltConsumer = consumer; - //consumer->set( "rescale", "none" ); - m_mltConsumer->set("resize", 1); - m_mltConsumer->set("window_id", (int) winid); - m_mltConsumer->set("terminate_on_pause", 1); - m_externalwinid = (int) externalMonitor; - m_winid = (int) winid; - m_mltConsumer->listen("consumer-frame-show", this, (mlt_listener) consumer_frame_show); - //m_mltProducer->set_speed(0.0); - //m_mltConsumer->connect( *m_mltProducer ); - //m_mltConsumer->start( ); -/* - m_mltConsumer = new Mlt::Consumer(m_profile, "sdl_preview"); - if (!m_mltConsumer || !m_mltConsumer->is_valid()) { - KMessageBox::error(qApp->activeWindow(), i18n("Could not create the video preview window.\nThere is something wrong with your Kdenlive install.\n Exiting now...")); - kError()<<"Sorry, cannot create MLT consumer, check your MLT install you miss SDL libraries support in MLT"; - exit(1); - } - - m_externalwinid = (int) externalMonitor; - m_winid = (int) winid; - - m_mltConsumer->set("window_id", m_winid); - m_mltConsumer->set("resize", 1); - - m_mltConsumer->set("terminate_on_pause", 1); - m_mltConsumer->set("progressive", 1); - m_mltConsumer->set("audio_buffer", 1024); - m_mltConsumer->set("frequency", 48000); - - m_mltConsumer->listen("consumer-frame-show", this, (mlt_listener) consumer_frame_show); -*/ - /*QString aDevice = KdenliveSettings::audiodevice(); - if (!KdenliveSettings::videodriver().isEmpty()) m_mltConsumer->set("video_driver", KdenliveSettings::videodriver().ascii()); - if (!KdenliveSettings::audiodriver().isEmpty()) m_mltConsumer->set("audio_driver", KdenliveSettings::audiodriver().ascii()); - m_mltConsumer->set("audio_device", aDevice.section(";", 1).ascii());*/ - - initSceneList(); - - //QTimer::singleShot(500, this, SLOT(initSceneList())); - //initSceneList(); -// m_mltConsumer->listen("consumer-stopped", this, (mlt_listener) consumer_stopped); -// m_mltConsumer->set("buffer", 25); -} int Render::resetRendererProfile(char * profile) @@ -198,11 +133,6 @@ int Render::resetRendererProfile(char * profile) return 1; } -void Render::restartConsumer() -{ - if (m_winid != -1) createVideoXWindow( m_winid, m_externalwinid); -} - /** Wraps the VEML command of the same name; Seeks the renderer clip to the given time. */ void Render::seek(GenTime time) { @@ -619,9 +549,7 @@ void Render::setSceneList(QDomDocument list, int position) }*/ m_fps = m_mltProducer->get_fps(); - if (!m_mltConsumer) { - restartConsumer(); - } + emit playListDuration(m_mltProducer->get_playtime()); //m_connectTimer->start( 500 ); connectPlaylist(); @@ -702,9 +630,8 @@ void Render::slotOsdTimeout() void Render::start() { kDebug()<<"----- STARTING MONITOR: "<set("refresh", 0); Mlt::Service service(m_mltProducer->parent().get_service()); diff --git a/src/renderer.h b/src/renderer.h index 213aaf15..5e2e7252 100644 --- a/src/renderer.h +++ b/src/renderer.h @@ -68,11 +68,6 @@ class Render:public QObject { Render(const QString & rendererName, int winid, int extid, QWidget *parent = 0); ~Render(); - /** Wraps the VEML command of the same name; requests that the renderer - should create a video window. If show is true, then the window should be - displayed, otherwise it should be hidden. Render will emit the signal - replyCreateVideoXWindow() once the renderer has replied. */ - void createVideoXWindow(WId winid, WId externalMonitor); /** Seeks the renderer clip to the given time. */ void seek(GenTime time); void seekToFrame(int pos); @@ -211,13 +206,10 @@ class Render:public QObject { /** refresh monitor display */ void refresh(); void slotOsdTimeout(); - void restartConsumer(); void connectPlaylist(); void initSceneList(); signals: // Signals - /** This signal is emitted once a reply to createVideoXWidow() has been recieved. */ - void replyCreateVideoXWindow(WId); /** emitted when the renderer recieves a reply to a getFileProperties request. */ void replyGetFileProperties(int clipId, const QMap < QString, QString > &, const QMap < QString, QString > &); diff --git a/src/trackview.cpp b/src/trackview.cpp index 7a727caf..2425e236 100644 --- a/src/trackview.cpp +++ b/src/trackview.cpp @@ -95,6 +95,7 @@ int TrackView::tracksNumber() void TrackView::parseDocument(QDomDocument doc) { int cursorPos = 0; + kDebug()<<"//// DOCUMENT: "<setCursorPos(pos * m_scale, false); + //m_ruler->slotNewValue(pos * FRAME_SIZE, false); } void TrackView::slotCursorMoved(int pos, bool emitSignal) -- 2.39.2