svn path=/trunk/kdenlive/; revision=5095
***************************************************************************/
#include "audiosignal.h"
***************************************************************************/
#include "audiosignal.h"
+#include "kdenlivesettings.h"
+
+#include <KLocale>
#include <QVBoxLayout>
#include <QLabel>
#include <QVBoxLayout>
#include <QLabel>
#include <QPainter>
#include <QDebug>
#include <QList>
#include <QPainter>
#include <QDebug>
#include <QList>
col << Qt::yellow << Qt::yellow << Qt::yellow << Qt::yellow << Qt::yellow ;
col << Qt::darkYellow << Qt::darkYellow << Qt::darkYellow;
col << Qt::red << Qt::red;
col << Qt::yellow << Qt::yellow << Qt::yellow << Qt::yellow << Qt::yellow ;
col << Qt::darkYellow << Qt::darkYellow << Qt::darkYellow;
col << Qt::red << Qt::red;
+ setContextMenuPolicy(Qt::ActionsContextMenu);
+ QAction *showSignal = new QAction(i18n("Monitor audio signal"), this);
+ showSignal->setCheckable(true);
+ showSignal->setChecked(KdenliveSettings::monitor_audio());
+ connect(showSignal, SIGNAL(toggled(bool)), this, SLOT(slotSwitchAudioMonitoring(bool)));
+ addAction(showSignal);
+
+void AudioSignal::slotSwitchAudioMonitoring(bool isOn)
+{
+ KdenliveSettings::setMonitor_audio(isOn);
+ emit updateAudioMonitoring();
+}
+
#include "audiosignal.moc"
#include "audiosignal.moc"
void paintEvent(QPaintEvent*);
public slots:
void showAudio(const QByteArray);
void paintEvent(QPaintEvent*);
public slots:
void showAudio(const QByteArray);
+private slots:
+ void slotSwitchAudioMonitoring(bool isOn);
+signals:
+ void updateAudioMonitoring();
<default>false</default>
</entry>
<default>false</default>
</entry>
+ <entry name="monitor_audio" type="Bool">
+ <label>Display audio levels.</label>
+ <default>true</default>
+ </entry>
+
m_audiosignalDock->setObjectName("audiosignal");
m_audiosignalDock->setWidget(m_audiosignal);
addDockWidget(Qt::TopDockWidgetArea, m_audiosignalDock);
m_audiosignalDock->setObjectName("audiosignal");
m_audiosignalDock->setWidget(m_audiosignal);
addDockWidget(Qt::TopDockWidgetArea, m_audiosignalDock);
+ connect(m_audiosignal, SIGNAL(updateAudioMonitoring()), m_monitorManager, SLOT(slotUpdateAudioMonitoring()));
if (m_projectMonitor) {
connect(m_projectMonitor->render, SIGNAL(showAudioSignal(const QByteArray&)), m_audiosignal, SLOT(showAudio(const QByteArray&)));
}
if (m_projectMonitor) {
connect(m_projectMonitor->render, SIGNAL(showAudioSignal(const QByteArray&)), m_audiosignal, SLOT(showAudio(const QByteArray&)));
}
#include "monitormanager.h"
#include "monitormanager.h"
#include "kdenlivesettings.h"
#include <mlt++/Mlt.h>
#include "kdenlivesettings.h"
#include <mlt++/Mlt.h>
else m_projectMonitor->refreshMonitor();
}
else m_projectMonitor->refreshMonitor();
}
+void MonitorManager::slotUpdateAudioMonitoring()
+{
+ m_clipMonitor->render->analyseAudio = KdenliveSettings::monitor_audio();
+ m_projectMonitor->render->analyseAudio = KdenliveSettings::monitor_audio();
+}
+
#include "monitormanager.moc"
#include "monitormanager.moc"
private slots:
void slotRefreshCurrentMonitor();
private slots:
void slotRefreshCurrentMonitor();
+ void slotUpdateAudioMonitoring();
private:
Monitor *m_clipMonitor;
private:
Monitor *m_clipMonitor;
static void kdenlive_callback(void* /*ptr*/, int level, const char* fmt, va_list vl)
{
if (level > MLT_LOG_ERROR) return;
static void kdenlive_callback(void* /*ptr*/, int level, const char* fmt, va_list vl)
{
if (level > MLT_LOG_ERROR) return;
if (self->sendFrameForAnalysis && frame_ptr->convert_image) {
self->emitFrameUpdated(frame);
}
if (self->sendFrameForAnalysis && frame_ptr->convert_image) {
self->emitFrameUpdated(frame);
}
- self->showAudio(frame);
+ if (self->analyseAudio) self->showAudio(frame);
if (frame.get_double("_speed") == 0.0) {
self->emitConsumerStopped();
} else if (frame.get_double("_speed") < 0.0 && mlt_frame_get_position(frame_ptr) <= 0) {
if (frame.get_double("_speed") == 0.0) {
self->emitConsumerStopped();
} else if (frame.get_double("_speed") < 0.0 && mlt_frame_get_position(frame_ptr) <= 0) {
QObject(parent),
m_isBlocked(0),
sendFrameForAnalysis(false),
QObject(parent),
m_isBlocked(0),
sendFrameForAnalysis(false),
+ analyseAudio(KdenliveSettings::monitor_audio()),
m_name(rendererName),
m_mltConsumer(NULL),
m_mltProducer(NULL),
m_name(rendererName),
m_mltConsumer(NULL),
m_mltProducer(NULL),
metadataPropertyMap[ name.section('.', 0, -2)] = value;
}
producer->seek(0);
metadataPropertyMap[ name.section('.', 0, -2)] = value;
}
producer->seek(0);
- kDebug() << "REquested fuile info for: " << url.path();
emit replyGetFileProperties(clipId, producer, filePropertyMap, metadataPropertyMap, replaceProducer);
// FIXME: should delete this to avoid a leak...
//delete producer;
emit replyGetFileProperties(clipId, producer, filePropertyMap, metadataPropertyMap, replaceProducer);
// FIXME: should delete this to avoid a leak...
//delete producer;
void Render::switchPlay()
{
void Render::switchPlay()
{
- kDebug() << "// SWITCH PLAY";
if (!m_mltProducer || !m_mltConsumer)
return;
if (m_isZoneMode) resetZoneMode();
if (m_mltProducer->get_speed() == 0.0) {
m_isBlocked = false;
if (!m_mltProducer || !m_mltConsumer)
return;
if (m_isZoneMode) resetZoneMode();
if (m_mltProducer->get_speed() == 0.0) {
m_isBlocked = false;
- kDebug() << "// SWITCH PLAY, set spped to 1";
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);
} else {
m_isBlocked = true;
m_mltConsumer->set("refresh", 0);
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);
} else {
m_isBlocked = true;
m_mltConsumer->set("refresh", 0);
- kDebug() << "// SWITCH PLAY, set spped to 0";
m_mltProducer->set_speed(0.0);
//emit rendererPosition(m_framePosition);
m_mltProducer->seek(m_framePosition);
m_mltProducer->set_speed(0.0);
//emit rendererPosition(m_framePosition);
m_mltProducer->seek(m_framePosition);
QImage qimage(width, height, QImage::Format_ARGB32_Premultiplied);
memcpy(qimage.scanLine(0), image, width * height * 4);
emit showImageSignal(qimage);
QImage qimage(width, height, QImage::Format_ARGB32_Premultiplied);
memcpy(qimage.scanLine(0), image, width * height * 4);
emit showImageSignal(qimage);
+ if (analyseAudio) showAudio(frame);
if (sendFrameForAnalysis && frame.get_frame()->convert_image) {
emit frameUpdated(qimage.rgbSwapped());
}
if (sendFrameForAnalysis && frame.get_frame()->convert_image) {
emit frameUpdated(qimage.rgbSwapped());
}
void showFrame(Mlt::Frame&);
void showAudio(Mlt::Frame&);
void showFrame(Mlt::Frame&);
void showAudio(Mlt::Frame&);
+ /** @brief This property is used to decide if the renderer should send audio data for monitoring. */
+ bool analyseAudio;
/** @brief This property is used to decide if the renderer should convert it's frames to QImage for use in other Kdenlive widgets. */
bool sendFrameForAnalysis;
QList <int> checkTrackSequence(int);
/** @brief This property is used to decide if the renderer should convert it's frames to QImage for use in other Kdenlive widgets. */
bool sendFrameForAnalysis;
QList <int> checkTrackSequence(int);