[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: extragear/multimedia/kmid/src
From: Pedro Lopez-Cabanillas <pedro.lopez.cabanillas () gmail ! com>
Date: 2010-07-28 12:35:03
Message-ID: 20100728123503.24B4EAC782 () svn ! kde ! org
[Download RAW message or body]
SVN commit 1156011 by pedrol:
kmid_part: wait for a connection before start playing, if required.
M +37 -10 kmid_part.cpp
--- trunk/extragear/multimedia/kmid/src/kmid_part.cpp #1156010:1156011
@@ -40,6 +40,8 @@
#include <QtCore/QFile>
#include <QtCore/QTextStream>
+#include <QtCore/QMutex>
+#include <QtCore/QMutexLocker>
#include <QtDBus/QtDBus>
#include <QtGui/QTextEdit>
@@ -65,7 +67,9 @@
m_settings(new KMid::Settings),
m_mapper(new KMid::MidiMapper),
m_autoStart(true),
- m_volfactor(1.0)
+ m_volfactor(1.0),
+ m_playerReady(false),
+ m_playPending(false)
{
if (parentWidget != 0)
m_view = new KMidPartView(parentWidget);
@@ -93,6 +97,9 @@
QString m_currentBackendLibrary;
bool m_autoStart;
double m_volfactor;
+ bool m_playerReady;
+ bool m_playPending;
+ QMutex m_connmutex;
};
KMidPart::KMidPart( QWidget *parentWidget, QObject *parent, const QVariantList& /*args*/ )
@@ -129,7 +136,6 @@
KMidPart::~KMidPart()
{
- kDebug();
stop();
if (d->m_midiout != 0) {
d->m_midiout->allNotesOff();
@@ -219,18 +225,25 @@
}
d->m_midiout->setResetMessage(d->m_resetMessage);
if (d->m_currentBackend->hasSoftSynths()) {
- connect( d->m_currentBackend, SIGNAL(softSynthStarted(const QString&,const QStringList&)),
+ connect( d->m_currentBackend,
+ SIGNAL(softSynthStarted(const QString&,const QStringList&)),
SLOT(slotSoftSynthStarted(const QString&,const QStringList&)));
- connect( d->m_currentBackend, SIGNAL(softSynthErrors(const QString&,const QStringList&)),
+ connect( d->m_currentBackend,
+ SIGNAL(softSynthErrors(const QString&,const QStringList&)),
SLOT(slotSoftSynthErrors(const QString&,const QStringList&)));
}
- if ( d->m_midiout != 0 && !d->m_settings->exec_fluid() && !d->m_settings->exec_timidity() )
+ if ( d->m_midiout != 0) {
+ if (d->m_settings->exec_fluid() || d->m_settings->exec_timidity())
+ kDebug() << "waiting for a soft synth";
+ else
connectMidiOutput();
+ }
slotUpdateState(Empty,Empty);
}
}
-void KMidPart::slotLoaded(Backend *backend, const QString& library, const QString& name)
+void KMidPart::slotLoaded( Backend *backend,
+ const QString& library, const QString& name)
{
MidiBackend midiBackend;
midiBackend.backend = backend;
@@ -317,10 +330,11 @@
void KMidPart::connectMidiOutput()
{
+ QMutexLocker locker(&d->m_connmutex);
bool success = false;
QString conn = d->m_settings->output_connection();
if (conn.isEmpty()) {
- QStringList items = d->m_midiout->outputDeviceList(true);
+ QStringList items = d->m_midiout->outputDeviceList();
conn = items.first();
success = d->m_midiout->setOutputDeviceName(conn);
if (success)
@@ -329,7 +343,12 @@
success = d->m_midiout->setOutputDeviceName(conn);
}
kDebug() << "connection to" << conn << "result:" << success;
+ d->m_playerReady = success;
+ if (success && d->m_playPending) {
+ locker.unlock();
+ play();
}
+}
void KMidPart::slotUpdateState(State newState, State /*oldState*/)
{
@@ -400,7 +419,6 @@
bool KMidPart::openFile()
{
QString localFile = localFilePath();
- kDebug() << localFile;
if (d->m_midiobj != 0) {
d->m_midiobj->setCurrentSource(localFile);
d->m_midiobj->seek(0);
@@ -462,9 +480,12 @@
void KMidPart::play()
{
- if (d->m_midiobj != NULL)
+ QMutexLocker locker(&d->m_connmutex);
+ if (d->m_midiobj != NULL) {
d->m_midiobj->play();
+ d->m_playPending = false;
}
+}
void KMidPart::stop()
{
@@ -474,10 +495,16 @@
void KMidPart::slotSourceChanged(QString src)
{
+ QMutexLocker locker(&d->m_connmutex);
if (d->m_view != 0)
d->m_view->setPosition(0);
- if (d->m_autoStart)
+ if (d->m_autoStart) {
+ if (d->m_playerReady) {
+ locker.unlock();
play();
+ } else
+ d->m_playPending = true;
+ }
emit sourceChanged(src);
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic