[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [38359] branches/soc-2011-pepper/intern/ audaspace: 3D Audio GSoC:

Joerg Mueller nexyon at gmail.com
Wed Jul 13 14:16:45 CEST 2011


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;




More information about the Bf-blender-cvs mailing list