From: <tt...@us...> - 2011-01-07 11:11:02
|
Revision: 5287 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=5287&view=rev Author: ttill Date: 2011-01-07 11:10:56 +0000 (Fri, 07 Jan 2011) Log Message: ----------- Fix images and color clips not properly updated in MLT when changing their in point Modified Paths: -------------- trunk/kdenlive/src/renderer.cpp Modified: trunk/kdenlive/src/renderer.cpp =================================================================== --- trunk/kdenlive/src/renderer.cpp 2011-01-07 10:34:27 UTC (rev 5286) +++ trunk/kdenlive/src/renderer.cpp 2011-01-07 11:10:56 UTC (rev 5287) @@ -2989,6 +2989,12 @@ m_isBlocked = true; previousStart += moveFrame; + if (previousStart < 0) { + // this is possible for images and color clips + previousOut -= previousStart; + previousStart = 0; + } + int length = previousOut + 1; if (length > clip->get_length()) { clip->parent().set("length", length + 1); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2011-01-25 12:34:05
|
Revision: 5352 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=5352&view=rev Author: j-b-m Date: 2011-01-25 12:33:58 +0000 (Tue, 25 Jan 2011) Log Message: ----------- Fix transitons put in reverse order when changing the track of a transition Modified Paths: -------------- trunk/kdenlive/src/renderer.cpp Modified: trunk/kdenlive/src/renderer.cpp =================================================================== --- trunk/kdenlive/src/renderer.cpp 2011-01-25 06:18:00 UTC (rev 5351) +++ trunk/kdenlive/src/renderer.cpp 2011-01-25 12:33:58 UTC (rev 5352) @@ -3328,12 +3328,11 @@ mlt_type = mlt_properties_get(properties, "mlt_type"); resource = mlt_properties_get(properties, "mlt_service"); } - field->plant_transition(tr, a_track, b_track); // re-add upper transitions - for (int i = 0; i < trList.count(); i++) { - // kDebug()<< "REPLANT ON TK: "<<trList.at(i)->get_a_track()<<", "<<trList.at(i)->get_b_track(); + for (int i = trList.count() - 1; i >= 0; i--) { + //kDebug()<< "REPLANT ON TK: "<<trList.at(i)->get_a_track()<<", "<<trList.at(i)->get_b_track(); field->plant_transition(*trList.at(i), trList.at(i)->get_a_track(), trList.at(i)->get_b_track()); } } @@ -3342,6 +3341,7 @@ { if (oldTag == tag && !force) mltUpdateTransitionParams(tag, a_track, b_track, in, out, xml); else { + kDebug()<<"// DELETING TRANS: "<<a_track<<"-"<<b_track; mltDeleteTransition(oldTag, a_track, b_track, in, out, xml, false); mltAddTransition(tag, a_track, b_track, in, out, xml, false); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2011-02-22 01:15:14
|
Revision: 5450 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=5450&view=rev Author: j-b-m Date: 2011-02-22 01:15:08 +0000 (Tue, 22 Feb 2011) Log Message: ----------- Fix audio mixing corruption introduced in last commit Modified Paths: -------------- trunk/kdenlive/src/renderer.cpp Modified: trunk/kdenlive/src/renderer.cpp =================================================================== --- trunk/kdenlive/src/renderer.cpp 2011-02-22 00:43:54 UTC (rev 5449) +++ trunk/kdenlive/src/renderer.cpp 2011-02-22 01:15:08 UTC (rev 5450) @@ -145,7 +145,6 @@ nextservicetodisconnect = nextservice; nextservice = mlt_service_producer(nextservice); mlt_field_disconnect_service(field->get_field(), nextservicetodisconnect); - nextservice = mlt_service_producer(nextservice); if (nextservice == NULL) break; properties = MLT_SERVICE_PROPERTIES(nextservice); mlt_type = mlt_properties_get(properties, "mlt_type"); @@ -3000,6 +2999,7 @@ int lowestTrack = getLowestNonMutedAudioTrack(tractor); mlt_service serv = m_mltProducer->parent().get_service(); + Mlt::Field *field = tractor.field(); mlt_service_lock(serv); m_isBlocked++; @@ -3008,18 +3008,29 @@ QString mlt_type = mlt_properties_get(properties, "mlt_type"); QString resource = mlt_properties_get(properties, "mlt_service"); + mlt_service nextservicetodisconnect; + // Delete all audio mixing transitions while (mlt_type == "transition") { - mlt_transition tr = (mlt_transition) nextservice; if (resource == "mix") { - mlt_properties transproperties = MLT_TRANSITION_PROPERTIES(tr); - mlt_properties_set_int(transproperties, "a_track", lowestTrack); + nextservicetodisconnect = nextservice; + nextservice = mlt_service_producer(nextservice); + mlt_field_disconnect_service(field->get_field(), nextservicetodisconnect); } - nextservice = mlt_service_producer(nextservice); + else nextservice = mlt_service_producer(nextservice); if (nextservice == NULL) break; properties = MLT_SERVICE_PROPERTIES(nextservice); mlt_type = mlt_properties_get(properties, "mlt_type"); resource = mlt_properties_get(properties, "mlt_service"); } + + // Re-add correct audio transitions + for (int i = lowestTrack + 1; i < tractor.count(); i++) { + Mlt::Transition *transition = new Mlt::Transition(*m_mltProfile, "mix"); + transition->set("always_active", 1); + transition->set("combine", 1); + transition->set("internal_added", 238); + field->plant_transition(*transition, lowestTrack, i); + } mlt_service_unlock(serv); m_isBlocked--; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2011-02-22 10:53:26
|
Revision: 5451 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=5451&view=rev Author: j-b-m Date: 2011-02-22 10:53:20 +0000 (Tue, 22 Feb 2011) Log Message: ----------- Keep same internal id for transitions Modified Paths: -------------- trunk/kdenlive/src/renderer.cpp Modified: trunk/kdenlive/src/renderer.cpp =================================================================== --- trunk/kdenlive/src/renderer.cpp 2011-02-22 01:15:08 UTC (rev 5450) +++ trunk/kdenlive/src/renderer.cpp 2011-02-22 10:53:20 UTC (rev 5451) @@ -3028,7 +3028,7 @@ Mlt::Transition *transition = new Mlt::Transition(*m_mltProfile, "mix"); transition->set("always_active", 1); transition->set("combine", 1); - transition->set("internal_added", 238); + transition->set("internal_added", 237); field->plant_transition(*transition, lowestTrack, i); } mlt_service_unlock(serv); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2011-05-10 19:32:58
|
Revision: 5584 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=5584&view=rev Author: j-b-m Date: 2011-05-10 19:32:52 +0000 (Tue, 10 May 2011) Log Message: ----------- MLT now seems to correctly handle the "out" property so that we can make a clip longer than original duration (the last frame will be repeated). Fixes proxy duration issue Modified Paths: -------------- trunk/kdenlive/src/renderer.cpp Modified: trunk/kdenlive/src/renderer.cpp =================================================================== --- trunk/kdenlive/src/renderer.cpp 2011-05-10 14:00:50 UTC (rev 5583) +++ trunk/kdenlive/src/renderer.cpp 2011-05-10 19:32:52 UTC (rev 5584) @@ -607,11 +607,14 @@ return; } - if (proxyProducer && xml.hasAttribute("proxy_out") && producer->get_out() != xml.attribute("proxy_out").toInt()) { - // Proxy file length is different than original clip length, this will corrupt project so disable this proxy clip - emit removeInvalidProxy(clipId, true); - delete producer; - return; + if (proxyProducer && xml.hasAttribute("proxy_out")) { + producer->set("out", xml.attribute("proxy_out").toInt()); + if (producer->get_out() != xml.attribute("proxy_out").toInt()) { + // Proxy file length is different than original clip length, this will corrupt project so disable this proxy clip + emit removeInvalidProxy(clipId, true); + delete producer; + return; + } } if (xml.hasAttribute("force_aspect_ratio")) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2011-06-09 12:57:31
|
Revision: 5691 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=5691&view=rev Author: j-b-m Date: 2011-06-09 12:57:25 +0000 (Thu, 09 Jun 2011) Log Message: ----------- Fix project corruption when deleting a track: http://www.kdenlive.org/mantis/view.php?id=2157 Modified Paths: -------------- trunk/kdenlive/src/renderer.cpp Modified: trunk/kdenlive/src/renderer.cpp =================================================================== --- trunk/kdenlive/src/renderer.cpp 2011-06-09 11:27:24 UTC (rev 5690) +++ trunk/kdenlive/src/renderer.cpp 2011-06-09 12:57:25 UTC (rev 5691) @@ -4026,17 +4026,7 @@ tractor.removeChild(track); //kDebug() << "/////////// RESULT SCENE: \n" << doc.toString(); setSceneList(doc.toString(), m_framePosition); - - /* if (m_mltProducer != NULL) { - Mlt::Producer parentProd(m_mltProducer->parent()); - if (parentProd.get_producer() != NULL) { - Mlt::Service service(parentProd.get_service()); - if (service.type() == tractor_type) { - Mlt::Tractor tractor(service); - mltCheckLength(&tractor); - } - } - }*/ + emit refreshDocumentProducers(false); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2011-06-20 19:45:01
|
Revision: 5723 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=5723&view=rev Author: j-b-m Date: 2011-06-20 19:44:55 +0000 (Mon, 20 Jun 2011) Log Message: ----------- Fix proxy triggering duration mismatch (part 2) Modified Paths: -------------- trunk/kdenlive/src/renderer.cpp Modified: trunk/kdenlive/src/renderer.cpp =================================================================== --- trunk/kdenlive/src/renderer.cpp 2011-06-20 19:39:03 UTC (rev 5722) +++ trunk/kdenlive/src/renderer.cpp 2011-06-20 19:44:55 UTC (rev 5723) @@ -616,6 +616,7 @@ } if (proxyProducer && xml.hasAttribute("proxy_out")) { + producer->set("length", xml.attribute("proxy_out").toInt() + 1); producer->set("out", xml.attribute("proxy_out").toInt()); if (producer->get_out() != xml.attribute("proxy_out").toInt()) { // Proxy file length is different than original clip length, this will corrupt project so disable this proxy clip This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2011-06-24 17:17:36
|
Revision: 5727 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=5727&view=rev Author: j-b-m Date: 2011-06-24 17:17:30 +0000 (Fri, 24 Jun 2011) Log Message: ----------- Fix transition track not correctly saved: http://kdenlive.org/mantis/view.php?id=2187 Modified Paths: -------------- trunk/kdenlive/src/renderer.cpp Modified: trunk/kdenlive/src/renderer.cpp =================================================================== --- trunk/kdenlive/src/renderer.cpp 2011-06-23 19:21:25 UTC (rev 5726) +++ trunk/kdenlive/src/renderer.cpp 2011-06-24 17:17:30 UTC (rev 5727) @@ -3511,7 +3511,6 @@ int currentOut = (int) mlt_transition_get_out(tr); // kDebug()<<"Looking for transition : " << currentIn <<'x'<<currentOut<< ", OLD oNE: "<<in_pos<<'x'<<out_pos; - if (resource == type && b_track == currentTrack && currentIn == in_pos && currentOut == out_pos) { QMap<QString, QString> map = mltGetTransitionParamsFromXml(xml); QMap<QString, QString>::Iterator it; @@ -3799,6 +3798,8 @@ //kDebug() << " ------ ADDING TRANSITION PARAMs: " << args.count(); if (xml.hasAttribute("id")) transition->set("kdenlive_id", xml.attribute("id").toUtf8().constData()); + if (xml.hasAttribute("force_track")) + transition->set("force_track", xml.attribute("force_track").toInt()); for (it = args.begin(); it != args.end(); ++it) { key = it.key(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2011-08-30 22:14:56
|
Revision: 5847 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=5847&view=rev Author: j-b-m Date: 2011-08-30 22:14:50 +0000 (Tue, 30 Aug 2011) Log Message: ----------- Fix previewing of affine transitions with transparent png Modified Paths: -------------- trunk/kdenlive/src/renderer.cpp Modified: trunk/kdenlive/src/renderer.cpp =================================================================== --- trunk/kdenlive/src/renderer.cpp 2011-08-28 23:31:12 UTC (rev 5846) +++ trunk/kdenlive/src/renderer.cpp 2011-08-30 22:14:50 UTC (rev 5847) @@ -1473,13 +1473,13 @@ void Render::emitFrameUpdated(Mlt::Frame& frame) { - mlt_image_format format = mlt_image_rgb24a; + mlt_image_format format = mlt_image_rgb24; int width = 0; int height = 0; const uchar* image = frame.get_image(format, width, height); - QImage qimage(width, height, QImage::Format_ARGB32); - memcpy(qimage.bits(), image, width * height * 4); - emit frameUpdated(qimage.rgbSwapped()); + QImage qimage(width, height, QImage::Format_RGB888); + memcpy(qimage.bits(), image, width * height * 3); + emit frameUpdated(qimage); } void Render::emitFrameNumber(double position) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <tt...@us...> - 2011-09-24 13:58:55
|
Revision: 5923 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=5923&view=rev Author: ttill Date: 2011-09-24 13:58:49 +0000 (Sat, 24 Sep 2011) Log Message: ----------- Fix build warning in effectstack_ui.ui Modified Paths: -------------- trunk/kdenlive/src/renderer.cpp Modified: trunk/kdenlive/src/renderer.cpp =================================================================== --- trunk/kdenlive/src/renderer.cpp 2011-09-24 13:22:58 UTC (rev 5922) +++ trunk/kdenlive/src/renderer.cpp 2011-09-24 13:58:49 UTC (rev 5923) @@ -51,7 +51,7 @@ static void kdenlive_callback(void* /*ptr*/, int level, const char* fmt, va_list vl) { -// kDebug() << "log level" << level << QString().vsprintf(fmt, vl).simplified(); + kDebug() << "log level" << level << QString().vsprintf(fmt, vl).simplified(); if (level > MLT_LOG_ERROR) return; QString error; QApplication::postEvent(qApp->activeWindow(), new MltErrorEvent(error.vsprintf(fmt, vl).simplified())); @@ -1331,9 +1331,9 @@ m_isBlocked = true; m_mltConsumer->set("refresh", 0); m_mltProducer->set_speed(0.0); + m_mltConsumer->purge(); //emit rendererPosition(m_framePosition); m_mltProducer->seek(m_framePosition); - //m_mltConsumer->purge(); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <tt...@us...> - 2011-09-24 14:18:44
|
Revision: 5925 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=5925&view=rev Author: ttill Date: 2011-09-24 14:18:38 +0000 (Sat, 24 Sep 2011) Log Message: ----------- Revert r5923 Fix build warning in effectstack_ui.ui. Wrong file commited. Revision Links: -------------- http://kdenlive.svn.sourceforge.net/kdenlive/?rev=5923&view=rev Modified Paths: -------------- trunk/kdenlive/src/renderer.cpp Modified: trunk/kdenlive/src/renderer.cpp =================================================================== --- trunk/kdenlive/src/renderer.cpp 2011-09-24 14:05:41 UTC (rev 5924) +++ trunk/kdenlive/src/renderer.cpp 2011-09-24 14:18:38 UTC (rev 5925) @@ -51,7 +51,7 @@ static void kdenlive_callback(void* /*ptr*/, int level, const char* fmt, va_list vl) { - kDebug() << "log level" << level << QString().vsprintf(fmt, vl).simplified(); +// kDebug() << "log level" << level << QString().vsprintf(fmt, vl).simplified(); if (level > MLT_LOG_ERROR) return; QString error; QApplication::postEvent(qApp->activeWindow(), new MltErrorEvent(error.vsprintf(fmt, vl).simplified())); @@ -1331,9 +1331,9 @@ m_isBlocked = true; m_mltConsumer->set("refresh", 0); m_mltProducer->set_speed(0.0); - m_mltConsumer->purge(); //emit rendererPosition(m_framePosition); m_mltProducer->seek(m_framePosition); + //m_mltConsumer->purge(); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2011-10-03 10:50:19
|
Revision: 5942 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=5942&view=rev Author: j-b-m Date: 2011-10-03 10:50:08 +0000 (Mon, 03 Oct 2011) Log Message: ----------- renderer: Remove inconsistent m_isBlocked variable, improve latency when pausing monitor by stopping consumer instead of simply setting playback speed to 0: http://kdenlive.org/mantis/view.php?id=2293 Modified Paths: -------------- trunk/kdenlive/src/renderer.cpp Modified: trunk/kdenlive/src/renderer.cpp =================================================================== --- trunk/kdenlive/src/renderer.cpp 2011-10-03 10:28:19 UTC (rev 5941) +++ trunk/kdenlive/src/renderer.cpp 2011-10-03 10:50:08 UTC (rev 5942) @@ -62,7 +62,6 @@ static void consumer_frame_show(mlt_consumer, Render * self, mlt_frame frame_ptr) { // detect if the producer has finished playing. Is there a better way to do it? - if (self->m_isBlocked) return; Mlt::Frame frame(frame_ptr); if (!frame.is_valid()) return; self->emitFrameNumber(mlt_frame_get_position(frame_ptr)); @@ -82,7 +81,6 @@ static void consumer_paused(mlt_consumer, Render * self, mlt_frame /*frame_ptr*/) { // detect if the producer has finished playing. Is there a better way to do it? - if (self->m_isBlocked) return; self->emitConsumerStopped(); } @@ -90,7 +88,6 @@ static void consumer_gl_frame_show(mlt_consumer, Render * self, mlt_frame frame_ptr) { // detect if the producer has finished playing. Is there a better way to do it? - if (self->m_isBlocked) return; Mlt::Frame frame(frame_ptr); self->showFrame(frame); if (frame.get_double("_speed") == 0.0) { @@ -103,7 +100,6 @@ Render::Render(const QString & rendererName, int winid, QString profile, QWidget *parent) : AbstractRender(rendererName, parent), - m_isBlocked(0), analyseAudio(KdenliveSettings::monitor_audio()), m_name(rendererName), m_mltConsumer(NULL), @@ -127,7 +123,6 @@ Render::~Render() { - m_isBlocked = 1; closeMlt(); delete m_mltProfile; } @@ -360,7 +355,6 @@ { if (!m_mltProducer) return; - m_isBlocked = false; m_mltProducer->seek((int)(time.frames(m_fps))); refresh(); } @@ -369,7 +363,6 @@ { if (!m_mltProducer) return; - m_isBlocked = false; m_mltProducer->seek(time); refresh(); } @@ -939,7 +932,6 @@ return -1; } - m_isBlocked = true; if (m_mltProducer) { m_mltProducer->set_speed(0); delete m_mltProducer; @@ -965,7 +957,6 @@ m_mltProducer->seek(position); emit rendererPosition(position); } else emit rendererPosition((int) m_mltProducer->position()); - m_isBlocked = false; return error; } @@ -977,7 +968,6 @@ int Render::setSceneList(QString playlist, int position) { if (m_winid == -1) return -1; - m_isBlocked = true; int error = 0; //kDebug() << "////// RENDER, SET SCENE LIST:\n" << playlist <<"\n..........:::."; @@ -1088,8 +1078,6 @@ if (error == 0) error = connectPlaylist(); else connectPlaylist(); fillSlowMotionProducers(); - - m_isBlocked = false; blockSignals(false); return error; @@ -1256,11 +1244,9 @@ //KMessageBox::error(qApp->activeWindow(), i18n("Could not create the video preview window.\nThere is something wrong with your Kdenlive install or your driver settings, please fix it.")); kDebug(QtWarningMsg) << "/ / / / CANNOT START MONITOR"; } else { - m_isBlocked = false; refresh(); } } - m_isBlocked = false; } void Render::stop() @@ -1273,7 +1259,6 @@ // delete m_mltConsumer; // m_mltConsumer = NULL; } - m_isBlocked = true; if (m_mltProducer) { if (m_isZoneMode) resetZoneMode(); @@ -1299,7 +1284,6 @@ return; if (m_mltProducer->get_speed() == 0.0) return; if (m_isZoneMode) resetZoneMode(); - m_isBlocked = true; m_mltConsumer->set("refresh", 0); m_mltProducer->set_speed(0.0); /* @@ -1315,17 +1299,22 @@ return; if (m_isZoneMode) resetZoneMode(); if (play && m_mltProducer->get_speed() == 0.0) { - m_isBlocked = false; if (m_name == "clip" && m_framePosition == (int) m_mltProducer->get_out()) m_mltProducer->seek(0); m_mltProducer->set_speed(1.0); m_mltConsumer->set("refresh", 1); + if (m_mltConsumer->is_stopped()) m_mltConsumer->start(); } else if (!play) { - m_isBlocked = true; - m_mltConsumer->set("refresh", 0); + stop(); + m_mltConsumer->set("refresh", "0"); + m_framePosition++; + m_mltProducer->seek(m_framePosition); + /*m_mltConsumer->set("refresh", 0); + m_mltConsumer->stop(); + m_mltConsumer->purge(); m_mltProducer->set_speed(0.0); - //emit rendererPosition(m_framePosition); + //m_framePosition = m_mltProducer->position(); m_mltProducer->seek(m_framePosition); - //m_mltConsumer->purge(); + emit rendererPosition(m_framePosition);*/ } } @@ -1334,7 +1323,6 @@ if (!m_mltProducer) return; // if (speed == 0.0) m_mltProducer->set("out", m_mltProducer->get_length() - 1); - m_isBlocked = false; m_mltProducer->set_speed(speed); /*if (speed == 0.0) { m_mltProducer->seek((int) m_framePosition + 1); @@ -1347,7 +1335,6 @@ { if (!m_mltProducer || !m_mltConsumer) return; - m_isBlocked = false; m_mltProducer->seek((int)(startTime.frames(m_fps))); m_mltProducer->set_speed(1.0); m_mltConsumer->set("refresh", 1); @@ -1367,7 +1354,6 @@ { if (!m_mltProducer || !m_mltConsumer) return; - m_isBlocked = false; if (!m_isZoneMode) m_originalOut = m_mltProducer->get_playtime() - 1; m_mltProducer->set("out", (int)(stopTime.frames(m_fps))); m_mltProducer->seek((int)(startTime.frames(m_fps))); @@ -1387,10 +1373,8 @@ void Render::seekToFrame(int pos) { - //kDebug()<<" ********* RENDER SEEK TO POS"; if (!m_mltProducer) return; - m_isBlocked = false; resetZoneMode(); m_mltProducer->seek(pos); refresh(); @@ -1398,10 +1382,8 @@ void Render::seekToFrameDiff(int diff) { - //kDebug()<<" ********* RENDER SEEK TO POS"; if (!m_mltProducer) return; - m_isBlocked = false; resetZoneMode(); m_mltProducer->seek(m_mltProducer->position() + diff); refresh(); @@ -1410,15 +1392,19 @@ void Render::doRefresh() { // Use a Timer so that we don't refresh too much - if (!m_isBlocked && m_mltConsumer) m_mltConsumer->set("refresh", 1); + if (m_mltConsumer) { + if (m_mltConsumer->is_stopped()) m_mltConsumer->start(); + m_mltConsumer->set("refresh", 1); + } } void Render::refresh() { - if (!m_mltProducer || m_isBlocked) + if (!m_mltProducer) return; if (m_mltConsumer) { m_mltConsumer->set("refresh", 1); + if (m_mltConsumer->is_stopped()) m_mltConsumer->start(); } } @@ -1714,8 +1700,6 @@ void Render::mltCutClip(int track, GenTime position) { - m_isBlocked = true; - Mlt::Service service(m_mltProducer->parent().get_service()); if (service.type() != tractor_type) { kWarning() << "// TRACTOR PROBLEM"; @@ -1742,7 +1726,6 @@ int clipIndex = trackPlaylist.get_clip_index_at(cutPos); if (trackPlaylist.is_blank(clipIndex)) { kDebug() << "// WARNING, TRYING TO CUT A BLANK"; - m_isBlocked = false; return; } mlt_service_lock(service.get_service()); @@ -1791,7 +1774,6 @@ kDebug()<<"CLIP "<<i<<": ("<<blankStart<<'x'<<blankStart + blankDuration<<")"<<blk; }*/ - m_isBlocked = false; } bool Render::mltUpdateClip(ItemInfo info, QDomElement element, Mlt::Producer *prod) @@ -1876,7 +1858,6 @@ //mlt_service_unlock(service.get_service()); return false; } - m_isBlocked = true; Mlt::Producer *clip = trackPlaylist.replace_with_blank(clipIndex); if (clip) delete clip; trackPlaylist.consolidate_blanks(0); @@ -1892,7 +1873,6 @@ }*/ //service.unlock(); if (track != 0 && trackPlaylist.count() <= clipIndex) mltCheckLength(&tractor); - m_isBlocked = false; return true; } @@ -2103,7 +2083,6 @@ int Render::mltChangeClipSpeed(ItemInfo info, ItemInfo speedIndependantInfo, double speed, double /*oldspeed*/, int strobe, Mlt::Producer *prod) { - m_isBlocked = true; int newLength = 0; Mlt::Service service(m_mltProducer->parent().get_service()); if (service.type() != tractor_type) { @@ -2278,7 +2257,6 @@ } delete original; if (clipIndex + 1 == trackPlaylist.count()) mltCheckLength(&tractor); - m_isBlocked = false; return newLength; } @@ -2291,7 +2269,6 @@ Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service()); Mlt::Service clipService(trackPlaylist.get_service()); - m_isBlocked = true; mlt_service_lock(service.get_service()); int ct = 0; Mlt::Filter *filter = clipService.filter(ct); @@ -2305,7 +2282,6 @@ } else ct++; filter = clipService.filter(ct); } - m_isBlocked = false; mlt_service_unlock(service.get_service()); refresh(); return success; @@ -2339,7 +2315,6 @@ } delete clip; - m_isBlocked = true; mlt_service_lock(service.get_service()); int ct = 0; Mlt::Filter *filter = clipService.filter(ct); @@ -2354,7 +2329,6 @@ } else ct++; filter = clipService.filter(ct); } - m_isBlocked = false; mlt_service_unlock(service.get_service()); if (doRefresh) refresh(); return success; @@ -2403,7 +2377,6 @@ const int filter_ix = params.paramValue("kdenlive_ix").toInt(); const QString region = params.paramValue("region"); int ct = 0; - m_isBlocked = true; mlt_service_lock(service.get_service()); Mlt::Filter *filter = service.filter(ct); @@ -2428,7 +2401,6 @@ ct++; filter = service.filter(ct); } - m_isBlocked = false; mlt_service_unlock(service.get_service()); if (doRefresh) refresh(); return true; @@ -2532,7 +2504,6 @@ } } else { kDebug() << "filter is NULL"; - m_isBlocked = false; mlt_service_unlock(service.get_service()); return false; } @@ -2576,7 +2547,6 @@ filter->set("kdenlive_ix", filter->get_int("kdenlive_ix") + 1); service.attach(*filter); } - m_isBlocked = false; mlt_service_unlock(service.get_service()); if (doRefresh) refresh(); return true; @@ -2589,7 +2559,6 @@ Mlt::Producer trackProducer(tractor.track(track)); Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service()); Mlt::Service clipService(trackPlaylist.get_service()); - m_isBlocked = true; int ct = 0; QString index = params.paramValue("kdenlive_ix"); QString tag = params.paramValue("tag"); @@ -2608,7 +2577,6 @@ // filter was not found, it was probably a disabled filter, so add it to the correct place... bool success = false;//mltAddTrackEffect(track, params); - m_isBlocked = false; return success; } QString prefix; @@ -2620,7 +2588,6 @@ } mlt_service_unlock(service.get_service()); - m_isBlocked = false; refresh(); return true; @@ -2664,7 +2631,6 @@ int diff = trackPlaylist.clip_start(clipIndex) + duration - m_mltProducer->position(); if (diff < 0 || diff > duration) doRefresh = false; - m_isBlocked = true; int ct = 0; Mlt::Filter *filter = clip->filter(ct); @@ -2681,7 +2647,6 @@ // filter was not found, it was probably a disabled filter, so add it to the correct place... bool success = mltAddEffect(track, position, params); - m_isBlocked = false; return success; } QString prefix; @@ -2700,7 +2665,6 @@ delete clip; mlt_service_unlock(service.get_service()); - m_isBlocked = false; if (doRefresh) refresh(); return true; } @@ -2727,7 +2691,6 @@ if (diff < 0 || diff > duration) doRefresh = false; delete clip; - m_isBlocked = true; int ct = 0; Mlt::Filter *filter = clipService.filter(ct); while (filter) { @@ -2737,8 +2700,6 @@ } else ct++; filter = clipService.filter(ct); } - - m_isBlocked = false; if (doRefresh) refresh(); } @@ -2768,7 +2729,6 @@ if (diff < 0 || diff > duration) doRefresh = false; delete clip; - m_isBlocked = true; int ct = 0; QList <Mlt::Filter *> filtersList; Mlt::Filter *filter = clipService.filter(ct); @@ -2820,7 +2780,6 @@ clipService.attach(*(filtersList.at(i))); } - m_isBlocked = false; if (doRefresh) refresh(); } @@ -2830,10 +2789,7 @@ Mlt::Tractor tractor(service); Mlt::Producer trackProducer(tractor.track(track)); Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service()); - Mlt::Service clipService(trackPlaylist.get_service()); - - m_isBlocked = true; int ct = 0; QList <Mlt::Filter *> filtersList; Mlt::Filter *filter = clipService.filter(ct); @@ -2884,13 +2840,11 @@ for (int i = 0; i < filtersList.count(); i++) { clipService.attach(*(filtersList.at(i))); } - m_isBlocked = false; refresh(); } bool Render::mltResizeClipEnd(ItemInfo info, GenTime clipDuration) { - m_isBlocked = true; Mlt::Service service(m_mltProducer->parent().get_service()); Mlt::Tractor tractor(service); Mlt::Producer trackProducer(tractor.track(info.track)); @@ -2908,7 +2862,6 @@ if (trackPlaylist.is_blank_at((int) info.startPos.frames(m_fps))) { kDebug() << "//////// ERROR RSIZING BLANK CLIP!!!!!!!!!!!"; - m_isBlocked = false; return false; } mlt_service_lock(service.get_service()); @@ -2968,7 +2921,6 @@ transpinfo.track = info.track; mltAddClipTransparency(transpinfo, info.track - 1, QString(clip->parent().get("id")).toInt()); }*/ - m_isBlocked = false; m_mltConsumer->set("refresh", 1); return true; } @@ -3024,7 +2976,6 @@ mlt_service serv = m_mltProducer->parent().get_service(); Mlt::Field *field = tractor.field(); mlt_service_lock(serv); - m_isBlocked++; mlt_service nextservice = mlt_service_get_producer(serv); mlt_properties properties = MLT_SERVICE_PROPERTIES(nextservice); @@ -3055,7 +3006,6 @@ field->plant_transition(*transition, lowestTrack, i); } mlt_service_unlock(serv); - m_isBlocked--; } bool Render::mltResizeClipCrop(ItemInfo info, GenTime diff) @@ -3080,9 +3030,7 @@ int previousStart = clip->get_in(); int previousOut = clip->get_out(); delete clip; - m_isBlocked = true; trackPlaylist.resize_clip(clipIndex, previousStart + frameOffset, previousOut + frameOffset); - m_isBlocked = false; mlt_service_unlock(service.get_service()); m_mltConsumer->set("refresh", 1); return true; @@ -3111,7 +3059,6 @@ int previousStart = clip->get_in(); int previousOut = clip->get_out(); - m_isBlocked = true; previousStart += moveFrame; if (previousStart < 0) { @@ -3155,7 +3102,6 @@ transpinfo.track = info.track; mltAddClipTransparency(transpinfo, info.track - 1, QString(clip->parent().get("id")).toInt()); }*/ - m_isBlocked = false; //m_mltConsumer->set("refresh", 1); mlt_service_unlock(service.get_service()); m_mltConsumer->set("refresh", 1); @@ -3174,7 +3120,6 @@ kDebug() << "// Warning, CLIP on track " << track << ", at: " << pos << " is invalid, cannot update it!!!"; return false; } - m_isBlocked++; //kDebug() << "// TRYING TO UPDATE CLIP at: " << pos << ", TK: " << track; Mlt::Service service(m_mltProducer->parent().get_service()); if (service.type() != tractor_type) { @@ -3191,7 +3136,6 @@ kDebug() << "// ERROR UPDATING CLIP PROD"; delete clipProducer; mlt_service_unlock(service.get_service()); - m_isBlocked--; return false; } Mlt::Producer *clip = prod->cut(clipProducer->get_in(), clipProducer->get_out()); @@ -3199,7 +3143,6 @@ if (clip) delete clip; delete clipProducer; mlt_service_unlock(service.get_service()); - m_isBlocked--; return false; } // move all effects to the correct producer @@ -3208,14 +3151,11 @@ delete clip; delete clipProducer; mlt_service_unlock(service.get_service()); - m_isBlocked--; return true; } bool Render::mltMoveClip(int startTrack, int endTrack, int moveStart, int moveEnd, Mlt::Producer *prod, bool overwrite, bool /*insert*/) { - m_isBlocked++; - Mlt::Service service(m_mltProducer->parent().get_service()); if (service.type() != tractor_type) { kWarning() << "// TRACTOR PROBLEM"; @@ -3240,7 +3180,6 @@ //int ix = trackPlaylist.get_clip_index_at(moveEnd); kDebug() << "// ERROR MOVING CLIP TO : " << moveEnd; mlt_service_unlock(service.get_service()); - m_isBlocked--; return false; } else { trackPlaylist.consolidate_blanks(0); @@ -3264,7 +3203,6 @@ if (!overwrite && !destTrackPlaylist.is_blank_at(moveEnd)) { // error, destination is not empty mlt_service_unlock(service.get_service()); - m_isBlocked--; return false; } else { Mlt::Producer *clipProducer = trackPlaylist.replace_with_blank(clipIndex); @@ -3274,7 +3212,6 @@ if (clipProducer) delete clipProducer; kDebug() << "// ERROR MOVING CLIP TO : " << moveEnd; mlt_service_unlock(service.get_service()); - m_isBlocked--; return false; } trackPlaylist.consolidate_blanks(0); @@ -3324,7 +3261,6 @@ } mlt_service_unlock(service.get_service()); if (checkLength) mltCheckLength(&tractor); - m_isBlocked--; //askForRefresh(); //m_mltConsumer->set("refresh", 1); return true; @@ -3376,8 +3312,6 @@ diff = new_out - m_mltProducer->position(); if (diff < 0 || diff > new_out - new_in) doRefresh = false; } - - m_isBlocked++; mlt_service_lock(service.get_service()); mlt_service nextservice = mlt_service_get_producer(service.get_service()); @@ -3414,7 +3348,6 @@ resource = mlt_properties_get(properties, "mlt_service"); } mlt_service_unlock(service.get_service()); - m_isBlocked--; if (doRefresh) refresh(); //if (m_isBlocked == 0) m_mltConsumer->set("refresh", 1); return found; @@ -3474,7 +3407,6 @@ { mlt_service serv = m_mltProducer->parent().get_service(); mlt_service_lock(serv); - m_isBlocked++; mlt_service nextservice = mlt_service_get_producer(serv); mlt_properties properties = MLT_SERVICE_PROPERTIES(nextservice); @@ -3534,7 +3466,6 @@ resource = mlt_properties_get(properties, "mlt_service"); } mlt_service_unlock(serv); - m_isBlocked--; //askForRefresh(); //if (m_isBlocked == 0) m_mltConsumer->set("refresh", 1); } @@ -3542,7 +3473,6 @@ void Render::mltDeleteTransition(QString tag, int /*a_track*/, int b_track, GenTime in, GenTime out, QDomElement /*xml*/, bool /*do_refresh*/) { mlt_service serv = m_mltProducer->parent().get_service(); - m_isBlocked++; mlt_service_lock(serv); Mlt::Service service(serv); @@ -3577,7 +3507,6 @@ resource = mlt_properties_get(properties, "mlt_service"); } mlt_service_unlock(serv); - m_isBlocked--; //askForRefresh(); //if (m_isBlocked == 0) m_mltConsumer->set("refresh", 1); } @@ -3680,7 +3609,6 @@ mlt_service_lock(service.get_service()); m_mltConsumer->set("refresh", 0); - m_isBlocked++; mlt_service serv = m_mltProducer->parent().get_service(); mlt_service nextservice = mlt_service_get_producer(serv); @@ -3707,8 +3635,7 @@ resource = mlt_properties_get(properties, "mlt_service"); } mlt_service_unlock(service.get_service()); - m_isBlocked--; - if (m_isBlocked == 0) m_mltConsumer->set("refresh", 1); + m_mltConsumer->set("refresh", 1); } @@ -3719,7 +3646,6 @@ mlt_service_lock(service.get_service()); m_mltConsumer->set("refresh", 0); - m_isBlocked++; mlt_service serv = m_mltProducer->parent().get_service(); mlt_service nextservice = mlt_service_get_producer(serv); @@ -3752,7 +3678,6 @@ mlt_type = mlt_properties_get(properties, "mlt_type"); resource = mlt_properties_get(properties, "mlt_service"); } - m_isBlocked--; mlt_service_unlock(service.get_service()); m_mltConsumer->set("refresh", 1); } @@ -3788,12 +3713,10 @@ //kDebug() << " ------ ADDING TRANS PARAM: " << key << ": " << it.value(); } // attach transition - m_isBlocked++; mlt_service_lock(service.get_service()); mltPlantTransition(field, *transition, a_track, b_track); // field->plant_transition(*transition, a_track, b_track); mlt_service_unlock(service.get_service()); - m_isBlocked--; if (do_refresh) refresh(); return true; } @@ -3881,7 +3804,6 @@ void Render::mltInsertTrack(int ix, bool videoTrack) { blockSignals(true); - m_isBlocked++; Mlt::Service service(m_mltProducer->parent().get_service()); mlt_service_lock(service.get_service()); @@ -3956,7 +3878,6 @@ mlt_service_unlock(service.get_service()); //tractor.multitrack()->refresh(); //tractor.refresh(); - m_isBlocked--; blockSignals(false); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2011-10-18 14:20:39
|
Revision: 5968 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=5968&view=rev Author: j-b-m Date: 2011-10-18 14:20:28 +0000 (Tue, 18 Oct 2011) Log Message: ----------- Fix memleak Modified Paths: -------------- trunk/kdenlive/src/renderer.cpp Modified: trunk/kdenlive/src/renderer.cpp =================================================================== --- trunk/kdenlive/src/renderer.cpp 2011-10-18 12:47:22 UTC (rev 5967) +++ trunk/kdenlive/src/renderer.cpp 2011-10-18 14:20:28 UTC (rev 5968) @@ -1518,7 +1518,6 @@ void Render::emitFrameNumber(double position) { - kDebug()<<"+++++++++++++++++++++++++++++++++++++++\n "<<m_name<<" GOT POSITION: "<<position<<"\n++++++++++++++++++++++++++"; m_framePosition = position; emit rendererPosition((int) position); } @@ -1891,9 +1890,9 @@ ct++; filter = sourceService.filter(ct); } - - trackPlaylist.replace_with_blank(clipIndex); delete clip; + clip = trackPlaylist.replace_with_blank(clipIndex); + delete clip; prod = checkSlowMotionProducer(prod, element); if (prod == NULL || !prod->is_valid()) { return false; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2011-10-18 15:30:05
|
Revision: 5969 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=5969&view=rev Author: j-b-m Date: 2011-10-18 15:29:59 +0000 (Tue, 18 Oct 2011) Log Message: ----------- Fix small memleak Modified Paths: -------------- trunk/kdenlive/src/renderer.cpp Modified: trunk/kdenlive/src/renderer.cpp =================================================================== --- trunk/kdenlive/src/renderer.cpp 2011-10-18 14:20:28 UTC (rev 5968) +++ trunk/kdenlive/src/renderer.cpp 2011-10-18 15:29:59 UTC (rev 5969) @@ -1644,6 +1644,7 @@ } if (blackclip == NULL || blackTrackPlaylist.count() != 1) { + if (blackclip) delete blackclip; blackTrackPlaylist.clear(); m_blackClip->set("length", duration + 1); m_blackClip->set("out", duration); @@ -1880,7 +1881,6 @@ // keep effects QList <Mlt::Filter *> filtersList; Mlt::Service sourceService(clip->get_service()); - sourceService.lock(); int ct = 0; Mlt::Filter *filter = sourceService.filter(ct); while (filter) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2011-10-30 16:06:45
|
Revision: 6006 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=6006&view=rev Author: j-b-m Date: 2011-10-30 16:06:39 +0000 (Sun, 30 Oct 2011) Log Message: ----------- Fix detection of clip frame rate with recent ffmpeg Modified Paths: -------------- trunk/kdenlive/src/renderer.cpp Modified: trunk/kdenlive/src/renderer.cpp =================================================================== --- trunk/kdenlive/src/renderer.cpp 2011-10-30 15:38:16 UTC (rev 6005) +++ trunk/kdenlive/src/renderer.cpp 2011-10-30 16:06:39 UTC (rev 6006) @@ -788,6 +788,8 @@ stringMap filePropertyMap; stringMap metadataPropertyMap; + char property[200]; + if (frameNumber > 0) producer->seek(frameNumber); duration = duration > 0 ? duration : producer->get_playtime(); @@ -839,10 +841,20 @@ } } } + + // Get frame rate + int vindex = producer->get_int("video_index"); + if (vindex > -1) { + snprintf(property, sizeof(property), "meta.media.%d.stream.frame_rate", vindex); + if (producer->get(property)) + filePropertyMap["fps"] = producer->get(property); + } - if (producer->get_double("meta.media.frame_rate_den") > 0) { - filePropertyMap["fps"] = locale.toString(producer->get_double("meta.media.frame_rate_num") / producer->get_double("meta.media.frame_rate_den")); - } else filePropertyMap["fps"] = producer->get("source_fps"); + if (!filePropertyMap.contains("fps")) { + if (producer->get_double("meta.media.frame_rate_den") > 0) { + filePropertyMap["fps"] = locale.toString(producer->get_double("meta.media.frame_rate_num") / producer->get_double("meta.media.frame_rate_den")); + } else filePropertyMap["fps"] = producer->get("source_fps"); + } Mlt::Frame *frame = producer->get_frame(); if (frame && frame->is_valid()) { @@ -884,10 +896,9 @@ } } // Retrieve audio / video codec name + // If there is a - // If there is a - char property[200]; - if (producer->get_int("video_index") > -1) { + if (vindex > -1) { /*if (context->duration == AV_NOPTS_VALUE) { kDebug() << " / / / / / / / /ERROR / / / CLIP HAS UNKNOWN DURATION"; emit removeInvalidClip(clipId); @@ -895,7 +906,6 @@ return; }*/ // Get the video_index - int default_video = producer->get_int("video_index"); int video_max = 0; int default_audio = producer->get_int("audio_index"); int audio_max = 0; @@ -909,21 +919,21 @@ else if (type == "audio") audio_max = ix; } - filePropertyMap["default_video"] = QString::number(default_video); + filePropertyMap["default_video"] = QString::number(vindex); filePropertyMap["video_max"] = QString::number(video_max); filePropertyMap["default_audio"] = QString::number(default_audio); filePropertyMap["audio_max"] = QString::number(audio_max); - snprintf(property, sizeof(property), "meta.media.%d.codec.long_name", default_video); + snprintf(property, sizeof(property), "meta.media.%d.codec.long_name", vindex); if (producer->get(property)) { filePropertyMap["videocodec"] = producer->get(property); } else { - snprintf(property, sizeof(property), "meta.media.%d.codec.name", default_video); + snprintf(property, sizeof(property), "meta.media.%d.codec.name", vindex); if (producer->get(property)) filePropertyMap["videocodec"] = producer->get(property); } QString query; - query = QString("meta.media.%1.codec.pix_fmt").arg(default_video); + query = QString("meta.media.%1.codec.pix_fmt").arg(vindex); filePropertyMap["pix_fmt"] = producer->get(query.toUtf8().constData()); filePropertyMap["colorspace"] = producer->get("meta.media.colorspace"); @@ -1002,7 +1012,11 @@ QMutexLocker locker(&m_mutex); QString currentId; int consumerPosition = 0; - if (m_winid == -1 || !m_mltConsumer) return -1; + if (m_winid == -1 || !m_mltConsumer) { + kDebug()<<" / / / / WARNING, MONITOR NOT READY"; + if (producer) delete producer; + return -1; + } m_mltConsumer->set("refresh", 0); if (!m_mltConsumer->is_stopped()) { m_mltConsumer->stop(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <j-...@us...> - 2010-05-06 09:57:51
|
Revision: 4414 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=4414&view=rev Author: j-b-m Date: 2010-05-06 09:57:44 +0000 (Thu, 06 May 2010) Log Message: ----------- Fix pasting of color/image clips Modified Paths: -------------- trunk/kdenlive/src/renderer.cpp Modified: trunk/kdenlive/src/renderer.cpp =================================================================== --- trunk/kdenlive/src/renderer.cpp 2010-05-06 09:48:39 UTC (rev 4413) +++ trunk/kdenlive/src/renderer.cpp 2010-05-06 09:57:44 UTC (rev 4414) @@ -1630,6 +1630,7 @@ } } int cutPos = (int) info.cropStart.frames(m_fps); + if (cutPos < 0) cutPos = 0; int insertPos = (int) info.startPos.frames(m_fps); int cutDuration = (int)(info.endPos - info.startPos).frames(m_fps) - 1; Mlt::Producer *clip = prod->cut(cutPos, cutDuration + cutPos); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |