X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Frenderer.cpp;h=b5d87ddfa5027c01e6dfda4bb2af8daf16b4c62c;hb=3b8469402b87f4af7176e470536364f25af63618;hp=352120833a1ffa99db3545d8c8970d51ed8edaa5;hpb=fc2d48a0aa41b940efbd8da08fcd7a2822c38025;p=kdenlive diff --git a/src/renderer.cpp b/src/renderer.cpp index 35212083..b5d87ddf 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -1899,7 +1899,7 @@ void Render::showFrame(Mlt::Frame* frame) delete frame; emit showImageSignal(qimage); if (sendFrameForAnalysis) { - emit frameUpdated(qimage);//.rgbSwapped()); + emit frameUpdated(qimage); } } else delete frame; showFrameSemaphore.release(); @@ -2604,6 +2604,10 @@ int Render::mltChangeClipSpeed(ItemInfo info, ItemInfo speedIndependantInfo, dou newLength = trackPlaylist.clip_length(clipIndex); service.unlock(); } else if (speed == 1.0 && strobe < 2) { + if (!prod || !prod->is_valid()) { + kDebug()<<"// Something is wrong with producer"; + return -1; + } service.lock(); Mlt::Producer *clip = trackPlaylist.replace_with_blank(clipIndex); @@ -2852,7 +2856,7 @@ bool Render::mltAddEffect(Mlt::Service service, EffectsParameterList params, int filter = service.filter(ct); } - addFilterToService(service, params, duration); + bool success = addFilterToService(service, params, duration); // re-add following filters for (int i = 0; i < filtersList.count(); i++) { @@ -2863,7 +2867,7 @@ bool Render::mltAddEffect(Mlt::Service service, EffectsParameterList params, int } service.unlock(); if (doRefresh) refresh(); - return true; + return success; } @@ -2872,10 +2876,8 @@ bool Render::addFilterToService(Mlt::Service service, EffectsParameterList param // create filter QString tag = params.paramValue("tag"); //kDebug() << " / / INSERTING EFFECT: " << tag << ", REGI: " << region; - char *filterTag = qstrdup(tag.toUtf8().constData()); - char *filterId = qstrdup(params.paramValue("id").toUtf8().constData()); QString kfr = params.paramValue("keyframes"); - if (!kfr.isEmpty()) { + if (!kfr.isEmpty()) { QStringList keyFrames = kfr.split(';', QString::SkipEmptyParts); //kDebug() << "// ADDING KEYFRAME EFFECT: " << params.paramValue("keyframes"); char *starttag = qstrdup(params.paramValue("starttag", "start").toUtf8().constData()); @@ -2895,9 +2897,9 @@ bool Render::addFilterToService(Mlt::Service service, EffectsParameterList param int offset = 0; // Special case, only one keyframe, means we want a constant value if (keyFrames.count() == 1) { - Mlt::Filter *filter = new Mlt::Filter(*m_mltProfile, filterTag); + Mlt::Filter *filter = new Mlt::Filter(*m_mltProfile, qstrdup(tag.toUtf8().constData())); if (filter && filter->is_valid()) { - filter->set("kdenlive_id", filterId); + filter->set("kdenlive_id", qstrdup(params.paramValue("id").toUtf8().constData())); int x1 = keyFrames.at(0).section(':', 0, 0).toInt(); double y1 = keyFrames.at(0).section(':', 1, 1).toDouble(); for (int j = 0; j < params.count(); j++) { @@ -2907,11 +2909,17 @@ bool Render::addFilterToService(Mlt::Service service, EffectsParameterList param //kDebug() << "// ADDING KEYFRAME vals: " << min<<" / "<set(starttag, m_locale.toString(((min + y1) - paramOffset) / factor).toUtf8().data()); service.attach(*filter); - } + } else { + delete[] starttag; + delete[] endtag; + kDebug() << "filter is NULL"; + service.unlock(); + return false; + } } else for (int i = 0; i < keyFrames.size() - 1; ++i) { - Mlt::Filter *filter = new Mlt::Filter(*m_mltProfile, filterTag); + Mlt::Filter *filter = new Mlt::Filter(*m_mltProfile, qstrdup(tag.toUtf8().constData())); if (filter && filter->is_valid()) { - filter->set("kdenlive_id", filterId); + filter->set("kdenlive_id", qstrdup(params.paramValue("id").toUtf8().constData())); int x1 = keyFrames.at(i).section(':', 0, 0).toInt() + offset; double y1 = keyFrames.at(i).section(':', 1, 1).toDouble(); int x2 = keyFrames.at(i + 1).section(':', 0, 0).toInt(); @@ -2929,16 +2937,22 @@ bool Render::addFilterToService(Mlt::Service service, EffectsParameterList param filter->set(endtag, m_locale.toString(((min + y2) - paramOffset) / factor).toUtf8().data()); service.attach(*filter); offset = 1; - } + } else { + delete[] starttag; + delete[] endtag; + kDebug() << "filter is NULL"; + service.unlock(); + return false; + } } delete[] starttag; delete[] endtag; } else { Mlt::Filter *filter; QString prefix; - filter = new Mlt::Filter(*m_mltProfile, filterTag); + filter = new Mlt::Filter(*m_mltProfile, qstrdup(tag.toUtf8().constData())); if (filter && filter->is_valid()) { - filter->set("kdenlive_id", filterId); + filter->set("kdenlive_id", qstrdup(params.paramValue("id").toUtf8().constData())); } else { kDebug() << "filter is NULL"; service.unlock(); @@ -2973,9 +2987,6 @@ bool Render::addFilterToService(Mlt::Service service, EffectsParameterList param // attach filter to the clip service.attach(*filter); } - - delete[] filterId; - delete[] filterTag; return true; }