Revision: 38359
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=38359
Author:   nexyon
Date:     2011-07-13 12:16:45 +0000 (Wed, 13 Jul 2011)
Log Message:
-----------
3D Audio GSoC:
* Fixed a warning in AUD_DoubleReader.cpp
* Removed some unneeded includes
* Fixed a bug resulting in a crash when stopping a sound
* Fixed a bug where a NaN resulted in a horrible memory error
* Fixed a typo bug which caused crackling in audio playback and export
* Added memory debugging code (ifdefed)

Modified Paths:
--------------
    branches/soc-2011-pepper/intern/audaspace/FX/AUD_DoubleReader.cpp
    branches/soc-2011-pepper/intern/audaspace/FX/AUD_LimiterReader.cpp
    branches/soc-2011-pepper/intern/audaspace/OpenAL/AUD_OpenALDevice.cpp
    branches/soc-2011-pepper/intern/audaspace/intern/AUD_ChannelMapperReader.cpp
    branches/soc-2011-pepper/intern/audaspace/intern/AUD_Mixer.cpp
    branches/soc-2011-pepper/intern/audaspace/intern/AUD_Reference.h
    branches/soc-2011-pepper/intern/audaspace/intern/AUD_SoftwareDevice.cpp

Modified: branches/soc-2011-pepper/intern/audaspace/FX/AUD_DoubleReader.cpp
===================================================================
--- branches/soc-2011-pepper/intern/audaspace/FX/AUD_DoubleReader.cpp   
2011-07-13 12:06:16 UTC (rev 38358)
+++ branches/soc-2011-pepper/intern/audaspace/FX/AUD_DoubleReader.cpp   
2011-07-13 12:16:45 UTC (rev 38359)
@@ -33,9 +33,6 @@
 
 #include <cstring>
 
-static const char* specs_error = "AUD_DoubleReader: Both readers have to have "
-                                                                "the same 
specs.";
-
 AUD_DoubleReader::AUD_DoubleReader(AUD_Reference<AUD_IReader> reader1,
                                                                   
AUD_Reference<AUD_IReader> reader2) :
                m_reader1(reader1), m_reader2(reader2), m_finished1(false)

Modified: branches/soc-2011-pepper/intern/audaspace/FX/AUD_LimiterReader.cpp
===================================================================
--- branches/soc-2011-pepper/intern/audaspace/FX/AUD_LimiterReader.cpp  
2011-07-13 12:06:16 UTC (rev 38358)
+++ branches/soc-2011-pepper/intern/audaspace/FX/AUD_LimiterReader.cpp  
2011-07-13 12:16:45 UTC (rev 38359)
@@ -32,8 +32,6 @@
 #include "AUD_LimiterReader.h"
 #include "AUD_Buffer.h"
 
-#include <iostream>
-
 AUD_LimiterReader::AUD_LimiterReader(AUD_Reference<AUD_IReader> reader,
                                                                         float 
start, float end) :
                AUD_EffectReader(reader),

Modified: branches/soc-2011-pepper/intern/audaspace/OpenAL/AUD_OpenALDevice.cpp
===================================================================
--- branches/soc-2011-pepper/intern/audaspace/OpenAL/AUD_OpenALDevice.cpp       
2011-07-13 12:06:16 UTC (rev 38358)
+++ branches/soc-2011-pepper/intern/audaspace/OpenAL/AUD_OpenALDevice.cpp       
2011-07-13 12:16:45 UTC (rev 38359)
@@ -178,10 +178,14 @@
 
        m_device->lock();
 
+       // AUD_XXX Create a reference of our own object so that it doesn't get
+       // deleted before the end of this function
+       AUD_Reference<AUD_OpenALHandle> This = this;
+
        if(m_status == AUD_STATUS_PLAYING)
-               m_device->m_playingSounds.remove(this);
+               m_device->m_playingSounds.remove(This);
        else
-               m_device->m_pausedSounds.remove(this);
+               m_device->m_pausedSounds.remove(This);
 
        m_device->unlock();
 

Modified: 
branches/soc-2011-pepper/intern/audaspace/intern/AUD_ChannelMapperReader.cpp
===================================================================
--- 
branches/soc-2011-pepper/intern/audaspace/intern/AUD_ChannelMapperReader.cpp    
    2011-07-13 12:06:16 UTC (rev 38358)
+++ 
branches/soc-2011-pepper/intern/audaspace/intern/AUD_ChannelMapperReader.cpp    
    2011-07-13 12:16:45 UTC (rev 38359)
@@ -60,6 +60,8 @@
 
 void AUD_ChannelMapperReader::setMonoAngle(float angle)
 {
+       if(std::isnan(angle))
+               angle = 0;
        m_mono_angle = angle;
        if(m_source_channels == AUD_CHANNELS_MONO)
                calculateMapping();
@@ -75,8 +77,6 @@
        return alpha;
 }
 
-#include <iostream>
-
 void AUD_ChannelMapperReader::calculateMapping()
 {
        if(m_map_size < m_source_channels * m_target_channels)
@@ -127,6 +127,8 @@
 
                for(int j = 0; j < m_target_channels; j++)
                {
+                       if(j == lfe)
+                               continue;
                        angle = angleDistance(source_angles[i], 
target_angles[j]);
                        if(angle < angle_min1)
                        {

Modified: branches/soc-2011-pepper/intern/audaspace/intern/AUD_Mixer.cpp
===================================================================
--- branches/soc-2011-pepper/intern/audaspace/intern/AUD_Mixer.cpp      
2011-07-13 12:06:16 UTC (rev 38358)
+++ branches/soc-2011-pepper/intern/audaspace/intern/AUD_Mixer.cpp      
2011-07-13 12:16:45 UTC (rev 38359)
@@ -92,7 +92,7 @@
        sample_t* out = m_buffer.getBuffer();
 
        length = (AUD_MIN(m_length, length + start) - start) * m_specs.channels;
-       start += m_specs.channels;
+       start *= m_specs.channels;
 
        for(int i = 0; i < length; i++)
                out[i + start] += buffer[i] * volume;

Modified: branches/soc-2011-pepper/intern/audaspace/intern/AUD_Reference.h
===================================================================
--- branches/soc-2011-pepper/intern/audaspace/intern/AUD_Reference.h    
2011-07-13 12:06:16 UTC (rev 38358)
+++ branches/soc-2011-pepper/intern/audaspace/intern/AUD_Reference.h    
2011-07-13 12:16:45 UTC (rev 38359)
@@ -33,6 +33,11 @@
 
 #include <map>
 
+#ifdef MEM_DEBUG
+#include <iostream>
+#include <typeinfo>
+#endif
+
 class AUD_ReferenceHandler
 {
 private:
@@ -88,6 +93,10 @@
        {
                m_original = m_reference = reference;
                AUD_ReferenceHandler::incref(reference);
+#ifdef MEM_DEBUG
+               if(m_reference != 0)
+                       std::cerr << "+" << typeid(*m_reference).name() << 
std::endl;
+#endif
        }
 
        /**
@@ -98,6 +107,10 @@
        {
                m_original = m_reference = ref.m_reference;
                AUD_ReferenceHandler::incref(m_reference);
+#ifdef MEM_DEBUG
+               if(m_reference != 0)
+                       std::cerr << "+" << typeid(*m_reference).name() << 
std::endl;
+#endif
        }
 
        template <class U>
@@ -106,6 +119,10 @@
                m_original = ref.get();
                m_reference = dynamic_cast<T*>(ref.get());
                AUD_ReferenceHandler::incref(m_original);
+#ifdef MEM_DEBUG
+               if(m_reference != 0)
+                       std::cerr << "+" << typeid(*m_reference).name() << 
std::endl;
+#endif
        }
 
        /**
@@ -114,6 +131,10 @@
         */
        ~AUD_Reference()
        {
+#ifdef MEM_DEBUG
+               if(m_reference != 0)
+                       std::cerr << "-" << typeid(*m_reference).name() << 
std::endl;
+#endif
                if(AUD_ReferenceHandler::decref(m_original))
                        delete m_reference;
        }
@@ -127,12 +148,20 @@
                if(&ref == this)
                        return *this;
 
+#ifdef MEM_DEBUG
+               if(m_reference != 0)
+                       std::cerr << "-" << typeid(*m_reference).name() << 
std::endl;
+#endif
                if(AUD_ReferenceHandler::decref(m_original))
                        delete m_reference;
 
                m_original = ref.m_original;
                m_reference = ref.m_reference;
                AUD_ReferenceHandler::incref(m_original);
+#ifdef MEM_DEBUG
+               if(m_reference != 0)
+                       std::cerr << "+" << typeid(*m_reference).name() << 
std::endl;
+#endif
 
                return *this;
        }

Modified: 
branches/soc-2011-pepper/intern/audaspace/intern/AUD_SoftwareDevice.cpp
===================================================================
--- branches/soc-2011-pepper/intern/audaspace/intern/AUD_SoftwareDevice.cpp     
2011-07-13 12:06:16 UTC (rev 38358)
+++ branches/soc-2011-pepper/intern/audaspace/intern/AUD_SoftwareDevice.cpp     
2011-07-13 12:16:45 UTC (rev 38359)
@@ -65,8 +65,6 @@
 {
 }
 
-#include <iostream>
-
 void AUD_SoftwareDevice::AUD_SoftwareHandle::update()
 {
        int flags = 0;
@@ -170,7 +168,7 @@
                {
                        AUD_Vector3 SZ = m_orientation.getLookAt();
 
-                       float phi = acos(SZ * SL / (SZ.length() * SL.length()));
+                       float phi = acos(float(SZ * SL / (SZ.length() * 
SL.length())));
                        float t = (phi - 
m_cone_angle_inner)/(m_cone_angle_outer - m_cone_angle_inner);
 
                        if(t > 0)
@@ -202,7 +200,7 @@
 
        if(Asquare > 0)
        {
-               float phi = acos(Z * A/ (Z.length() * sqrt(Asquare)));
+               float phi = acos(float(Z * A / (Z.length() * sqrt(Asquare))));
                if(N.cross(Z) * A > 0)
                        phi = -phi;
 
@@ -268,15 +266,19 @@
 
        m_device->lock();
 
+       // AUD_XXX Create a reference of our own object so that it doesn't get
+       // deleted before the end of this function
+       AUD_Reference<AUD_SoftwareHandle> This = this;
+
        if(m_status == AUD_STATUS_PLAYING)
        {
-               m_device->m_playingSounds.remove(this);
+               m_device->m_playingSounds.remove(This);
 
                if(m_device->m_playingSounds.empty())
                        m_device->playing(m_device->m_playback = false);
        }
        else
-               m_device->m_pausedSounds.remove(this);
+               m_device->m_pausedSounds.remove(This);
 
        m_device->unlock();
        m_status = AUD_STATUS_INVALID;

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

Reply via email to