X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Frenderer.cpp;h=ca7f0d82d3b71f6c1b08e056cf7e6afed8198397;hb=e384cfce0d3eb8847687326c85d8e621e14b8184;hp=4d146bf5430ef8ac879224511740dd348d3d9a3d;hpb=004b2c5e873673f84606567f9a2152bdd026f11e;p=kdenlive diff --git a/src/renderer.cpp b/src/renderer.cpp index 4d146bf5..ca7f0d82 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -53,8 +53,8 @@ static void kdenlive_callback(void* /*ptr*/, int level, const char* fmt, va_list vl) { -// kDebug() << "log level" << level << QString().vsprintf(fmt, vl).simplified(); if (level > MLT_LOG_ERROR) return; + //kDebug() << "log level" << level << QString().vsprintf(fmt, vl).simplified(); QString error; QApplication::postEvent(qApp->activeWindow(), new MltErrorEvent(error.vsprintf(fmt, vl).simplified())); va_end(vl); @@ -429,6 +429,7 @@ void Render::seek(int time) m_mltProducer->seek(time); if (m_paused && !externalConsumer) { m_mltConsumer->set("refresh", 1); + m_paused = false; } else if (m_mltProducer->get_speed() == 0) { // workaround specific bug in MLT's SDL consumer @@ -984,15 +985,20 @@ void Render::processFileProperties() Mlt::Frame *frame = producer->get_frame(); if (frame && frame->is_valid()) { filePropertyMap["frame_size"] = QString::number(frame->get_int("width")) + 'x' + QString::number(frame->get_int("height")); - filePropertyMap["frequency"] = QString::number(frame->get_int("frequency")); - filePropertyMap["channels"] = QString::number(frame->get_int("channels")); + int af = frame->get_int("audio_frequency"); + int ac = frame->get_int("audio_channels"); + // keep for compatibility with MLT <= 0.8.6 + if (af == 0) af = frame->get_int("frequency"); + if (ac == 0) ac = frame->get_int("channels"); + if (af > 0) filePropertyMap["frequency"] = QString::number(af); + if (ac > 0) filePropertyMap["channels"] = QString::number(ac); if (!filePropertyMap.contains("aspect_ratio")) filePropertyMap["aspect_ratio"] = frame->get("aspect_ratio"); if (frame->get_int("test_image") == 0) { if (mltService == "xml" || mltService == "consumer") { filePropertyMap["type"] = "playlist"; metadataPropertyMap["comment"] = QString::fromUtf8(producer->get("title")); - } else if (frame->get_int("test_audio") == 0) + } else if (!mlt_frame_is_test_audio(frame->get_frame())) filePropertyMap["type"] = "av"; else filePropertyMap["type"] = "video"; @@ -1770,6 +1776,12 @@ void Render::emitFrameUpdated(Mlt::Frame& frame) emit frameUpdated(qimage.rgbSwapped()); } +int Render::getCurrentSeekPosition() const +{ + if (requestedSeekPosition != SEEK_INACTIVE) return requestedSeekPosition; + return (int) m_mltProducer->position(); +} + void Render::emitFrameNumber() { int currentPos = m_mltConsumer->position(); @@ -1778,7 +1790,10 @@ void Render::emitFrameNumber() if (requestedSeekPosition != SEEK_INACTIVE) { m_mltConsumer->purge(); m_mltProducer->seek(requestedSeekPosition); - if (m_mltProducer->get_speed() == 0) m_mltConsumer->set("refresh", 1); + if (m_mltProducer->get_speed() == 0 && m_paused) { + m_paused = false; + m_mltConsumer->set("refresh", 1); + } requestedSeekPosition = SEEK_INACTIVE; } }