Revision: 33846
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=33846
Author:   nexyon
Date:     2010-12-22 11:51:34 +0100 (Wed, 22 Dec 2010)

Log Message:
-----------
Audio:

* Improve Jack Transport responsiveness.
* Added minor error checking to OpenAL.

Modified Paths:
--------------
    trunk/blender/intern/audaspace/OpenAL/AUD_OpenALDevice.cpp
    trunk/blender/intern/audaspace/jack/AUD_JackDevice.cpp
    trunk/blender/intern/audaspace/jack/AUD_JackDevice.h

Modified: trunk/blender/intern/audaspace/OpenAL/AUD_OpenALDevice.cpp
===================================================================
--- trunk/blender/intern/audaspace/OpenAL/AUD_OpenALDevice.cpp  2010-12-22 
10:44:31 UTC (rev 33845)
+++ trunk/blender/intern/audaspace/OpenAL/AUD_OpenALDevice.cpp  2010-12-22 
10:51:34 UTC (rev 33846)
@@ -128,13 +128,15 @@
 
        ALint info;
        AUD_DeviceSpecs specs = m_specs;
+       ALCenum cerr;
 
        while(1)
        {
                lock();
 
                alcSuspendContext(m_context);
-
+               cerr = alcGetError(m_device);
+               if(cerr == ALC_NO_ERROR)
                {
                        // for all sounds
                        for(AUD_HandleIterator it = m_playingSounds->begin(); 
it != m_playingSounds->end(); it++)
@@ -253,12 +255,12 @@
                                                alSourcePlay(sound->source);
                                }
                        }
+
+                       alcProcessContext(m_context);
                }
 
-               alcProcessContext(m_context);
-
                // stop thread
-               if(m_playingSounds->empty())
+               if(m_playingSounds->empty() || (cerr != ALC_NO_ERROR))
                {
                        unlock();
                        m_playing = false;

Modified: trunk/blender/intern/audaspace/jack/AUD_JackDevice.cpp
===================================================================
--- trunk/blender/intern/audaspace/jack/AUD_JackDevice.cpp      2010-12-22 
10:44:31 UTC (rev 33845)
+++ trunk/blender/intern/audaspace/jack/AUD_JackDevice.cpp      2010-12-22 
10:51:34 UTC (rev 33846)
@@ -236,9 +236,9 @@
        create();
 
        m_valid = true;
-       m_playing = false;
        m_sync = 0;
        m_syncFunc = NULL;
+       m_nextState = m_state = jack_transport_query(m_client, NULL);
 
        pthread_mutex_init(&m_mixingLock, NULL);
        pthread_cond_init(&m_mixingCondition, NULL);
@@ -307,11 +307,13 @@
 void AUD_JackDevice::startPlayback()
 {
        jack_transport_start(m_client);
+       m_nextState = JackTransportRolling;
 }
 
 void AUD_JackDevice::stopPlayback()
 {
        jack_transport_stop(m_client);
+       m_nextState = JackTransportStopped;
 }
 
 void AUD_JackDevice::seekPlayback(float time)
@@ -335,5 +337,10 @@
 
 bool AUD_JackDevice::doesPlayback()
 {
-       return jack_transport_query(m_client, NULL) != JackTransportStopped;
+       jack_transport_state_t state = jack_transport_query(m_client, NULL);
+
+       if(state != m_state)
+               m_nextState = m_state = state;
+
+       return m_nextState != JackTransportStopped;
 }

Modified: trunk/blender/intern/audaspace/jack/AUD_JackDevice.h
===================================================================
--- trunk/blender/intern/audaspace/jack/AUD_JackDevice.h        2010-12-22 
10:44:31 UTC (rev 33845)
+++ trunk/blender/intern/audaspace/jack/AUD_JackDevice.h        2010-12-22 
10:51:34 UTC (rev 33846)
@@ -87,11 +87,16 @@
        static int jack_sync(jack_transport_state_t state, jack_position_t* 
pos, void* data);
 
        /**
-        * Last Jack Transport playing state.
+        * Next Jack Transport state (-1 if not expected to change).
         */
-       bool m_playing;
+       jack_transport_state_t m_nextState;
 
        /**
+        * Current jack transport status.
+        */
+       jack_transport_state_t m_state;
+
+       /**
         * Syncronisation state.
         */
        int m_sync;


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to