void PeakLevelMeters::setValues(float leftVal, float rightVal) { float f= 1.0f+levelToDB(leftVal)/dbRange; if (f<0.f) f= 0.f; left.setValue(f); f= 1.0f+levelToDB(rightVal)/dbRange; if (f<0.f) f= 0.f; right.setValue(f); }
void MonitorAudioLevel::refreshScope(const QSize& /*size*/, bool /*full*/) { SharedFrame sFrame; while (m_queue.count() > 0) { sFrame = m_queue.pop(); if (sFrame.is_valid() && sFrame.get_audio_samples() > 0) { mlt_audio_format format = mlt_audio_s16; int channels = sFrame.get_audio_channels(); int frequency = sFrame.get_audio_frequency(); int samples = sFrame.get_audio_samples(); Mlt::Frame mFrame = sFrame.clone(true, false, false); m_filter->process(mFrame); mFrame.get_audio( format, frequency, channels, samples ); if (samples == 0) { // There was an error processing audio from frame continue; } QVector<int> levels; for (int i = 0; i < audioChannels; i++) { QString s = QString("meta.media.audio_level.%1").arg(i); double audioLevel = mFrame.get_double(s.toLatin1().constData()); if (audioLevel == 0.0) { levels << -100; } else { levels << (int) levelToDB(audioLevel); } } QMetaObject::invokeMethod(this, "setAudioValues", Qt::QueuedConnection, Q_ARG(const QVector<int>&, levels)); } }