[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [41014] trunk/blender/intern/audaspace: Fix for [#28916] 2.6 RC2 - Bake Sound to FCurve Crash
Joerg Mueller
nexyon at gmail.com
Fri Oct 14 18:58:22 CEST 2011
Revision: 41014
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41014
Author: nexyon
Date: 2011-10-14 16:58:21 +0000 (Fri, 14 Oct 2011)
Log Message:
-----------
Fix for [#28916] 2.6 RC2 - Bake Sound to FCurve Crash
Modified Paths:
--------------
trunk/blender/intern/audaspace/FX/AUD_DynamicIIRFilterReader.cpp
trunk/blender/intern/audaspace/FX/AUD_IIRFilterReader.cpp
trunk/blender/intern/audaspace/intern/AUD_C-API.cpp
Modified: trunk/blender/intern/audaspace/FX/AUD_DynamicIIRFilterReader.cpp
===================================================================
--- trunk/blender/intern/audaspace/FX/AUD_DynamicIIRFilterReader.cpp 2011-10-14 16:23:41 UTC (rev 41013)
+++ trunk/blender/intern/audaspace/FX/AUD_DynamicIIRFilterReader.cpp 2011-10-14 16:58:21 UTC (rev 41014)
@@ -32,7 +32,8 @@
AUD_DynamicIIRFilterReader::AUD_DynamicIIRFilterReader(AUD_Reference<AUD_IReader> reader,
AUD_Reference<AUD_DynamicIIRFilterFactory> factory) :
- AUD_IIRFilterReader(reader, std::vector<float>(), std::vector<float>())
+ AUD_IIRFilterReader(reader, std::vector<float>(), std::vector<float>()),
+ m_factory(factory)
{
sampleRateChanged(reader->getSpecs().rate);
}
Modified: trunk/blender/intern/audaspace/FX/AUD_IIRFilterReader.cpp
===================================================================
--- trunk/blender/intern/audaspace/FX/AUD_IIRFilterReader.cpp 2011-10-14 16:23:41 UTC (rev 41013)
+++ trunk/blender/intern/audaspace/FX/AUD_IIRFilterReader.cpp 2011-10-14 16:58:21 UTC (rev 41014)
@@ -36,11 +36,14 @@
const std::vector<float>& a) :
AUD_BaseIIRFilterReader(reader, b.size(), a.size()), m_a(a), m_b(b)
{
- for(int i = 1; i < m_a.size(); i++)
- m_a[i] /= m_a[0];
- for(int i = 0; i < m_b.size(); i++)
- m_b[i] /= m_a[0];
- m_a[0] = 1;
+ if(m_a.size())
+ {
+ for(int i = 1; i < m_a.size(); i++)
+ m_a[i] /= m_a[0];
+ for(int i = 0; i < m_b.size(); i++)
+ m_b[i] /= m_a[0];
+ m_a[0] = 1;
+ }
}
sample_t AUD_IIRFilterReader::filter()
@@ -58,7 +61,7 @@
void AUD_IIRFilterReader::setCoefficients(const std::vector<float>& b,
const std::vector<float>& a)
{
- setLengths(m_b.size(), m_a.size());
+ setLengths(b.size(), a.size());
m_a = a;
m_b = b;
}
Modified: trunk/blender/intern/audaspace/intern/AUD_C-API.cpp
===================================================================
--- trunk/blender/intern/audaspace/intern/AUD_C-API.cpp 2011-10-14 16:23:41 UTC (rev 41013)
+++ trunk/blender/intern/audaspace/intern/AUD_C-API.cpp 2011-10-14 16:58:21 UTC (rev 41014)
@@ -826,42 +826,51 @@
AUD_Reference<AUD_IFactory> file = new AUD_FileFactory(filename);
- AUD_Reference<AUD_IReader> reader = file->createReader();
- AUD_SampleRate rate = reader->getSpecs().rate;
+ int position = 0;
- sound = new AUD_ChannelMapperFactory(file, specs);
+ try
+ {
+ AUD_Reference<AUD_IReader> reader = file->createReader();
- if(high < rate)
- sound = new AUD_LowpassFactory(sound, high);
- if(low > 0)
- sound = new AUD_HighpassFactory(sound, low);
+ AUD_SampleRate rate = reader->getSpecs().rate;
- sound = new AUD_EnvelopeFactory(sound, attack, release, threshold, 0.1f);
- sound = new AUD_LinearResampleFactory(sound, specs);
+ sound = new AUD_ChannelMapperFactory(file, specs);
- if(square)
- sound = new AUD_SquareFactory(sound, sthreshold);
+ if(high < rate)
+ sound = new AUD_LowpassFactory(sound, high);
+ if(low > 0)
+ sound = new AUD_HighpassFactory(sound, low);
- if(accumulate)
- sound = new AUD_AccumulatorFactory(sound, additive);
- else if(additive)
- sound = new AUD_SumFactory(sound);
+ sound = new AUD_EnvelopeFactory(sound, attack, release, threshold, 0.1f);
+ sound = new AUD_LinearResampleFactory(sound, specs);
- reader = sound->createReader();
+ if(square)
+ sound = new AUD_SquareFactory(sound, sthreshold);
- if(reader.isNull())
- return NULL;
+ if(accumulate)
+ sound = new AUD_AccumulatorFactory(sound, additive);
+ else if(additive)
+ sound = new AUD_SumFactory(sound);
- int len;
- int position = 0;
- bool eos;
- do
+ reader = sound->createReader();
+
+ if(reader.isNull())
+ return NULL;
+
+ int len;
+ bool eos;
+ do
+ {
+ len = samplerate;
+ buffer.resize((position + len) * sizeof(float), true);
+ reader->read(len, eos, buffer.getBuffer() + position);
+ position += len;
+ } while(!eos);
+ }
+ catch(AUD_Exception&)
{
- len = samplerate;
- buffer.resize((position + len) * sizeof(float), true);
- reader->read(len, eos, buffer.getBuffer() + position);
- position += len;
- } while(!eos);
+ return NULL;
+ }
float* result = (float*)malloc(position * sizeof(float));
memcpy(result, buffer.getBuffer(), position * sizeof(float));
More information about the Bf-blender-cvs
mailing list