[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    extragear/multimedia/kmid/alsa
From:       Pedro Lopez-Cabanillas <pedro.lopez.cabanillas () gmail ! com>
Date:       2010-06-08 5:55:25
Message-ID: 20100608055525.48CD9AC8CE () svn ! kde ! org
[Download RAW message or body]

SVN commit 1135743 by pedrol:

snd_seq_event_output_direct() is not thread safe, this workaround uses two ALSA \
clients: one in the player thread, and another one for output.

CCBUG: 240391

 M  +8 -2      alsamidiobject.cpp  
 M  +4 -11     alsamidioutput.cpp  


--- trunk/extragear/multimedia/kmid/alsa/alsamidiobject.cpp #1135742:1135743
@@ -158,9 +158,15 @@
     void ALSAMIDIObject::initialize(ALSAMIDIOutput *output)
     {
         d->m_out = output;
-        d->m_client = output->client();
+        d->m_client = new MidiClient(this);
+        d->m_client->open();
+        d->m_client->setClientName("KMid Internal");
         d->m_queue = d->m_client->getQueue();
-        d->m_port = output->loopbackPort();
+        d->m_port = d->m_client->createPort();
+        d->m_port->setPortName("loopback");
+        d->m_port->setCapability( SND_SEQ_PORT_CAP_WRITE |
+                                  SND_SEQ_PORT_CAP_NO_EXPORT );
+        d->m_port->setPortType( SND_SEQ_PORT_TYPE_SPECIFIC );
         d->m_clientId = d->m_client->getClientId();
         d->m_queueId = d->m_queue->getId();
         d->m_portId = d->m_port->getPortId();
--- trunk/extragear/multimedia/kmid/alsa/alsamidioutput.cpp #1135742:1135743
@@ -40,7 +40,6 @@
             m_out(q),
             m_client(0),
             m_port(0),
-            m_loopbkport(0),
             m_mapper(0),
             m_portId(0),
             m_pitchShift(0),
@@ -60,7 +59,6 @@
         ALSAMIDIOutput *m_out;
         MidiClient *m_client;
         MidiPort *m_port;
-        MidiPort *m_loopbkport;
         MidiMapper *m_mapper;
         int m_portId;
         int m_pitchShift;
@@ -271,6 +269,8 @@
             if ( d->m_clientFilter &&
                  name.startsWith(QLatin1String("Virtual Raw MIDI")) )
                 continue;
+            if ( name.startsWith(QLatin1String("KMid")) )
+                continue;
             d->m_outputDevices << name;
         }
         if (!d->m_currentOutput.isEmpty() &&
@@ -434,20 +434,13 @@
 
     MidiClient* ALSAMIDIOutput::client() const
     {
-        return d->m_client;
+        return 0;
     }
 
     MidiPort* ALSAMIDIOutput::loopbackPort()
     {
-        if (d->m_loopbkport == NULL) {
-            d->m_loopbkport = d->m_client->createPort();
-            d->m_loopbkport->setPortName("loopback");
-            d->m_loopbkport->setCapability( SND_SEQ_PORT_CAP_WRITE |
-                                            SND_SEQ_PORT_CAP_NO_EXPORT );
-            d->m_loopbkport->setPortType( SND_SEQ_PORT_TYPE_SPECIFIC );
+        return 0;
         }
-        return d->m_loopbkport;
-    }
 
 }
 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic