Audaspace:
[blender.git] / intern / audaspace / intern / AUD_JOSResampleReader.cpp
index 8da3d55acae273c7384b9bb21099d99dc165e4a5..62fab48272bf1fff4c0d5836b8cf402a5482870a 100644 (file)
@@ -1,6 +1,4 @@
 /*
- * $Id$
- *
  * ***** BEGIN GPL LICENSE BLOCK *****
  *
  * Copyright 2009-2011 Jörg Hermann Müller
@@ -70,7 +68,7 @@ static inline int lrint(double d)
 #define fp_rest(x) (x & ((1 << SHIFT_BITS) - 1))
 #define fp_rest_to_double(x) fp_to_double(fp_rest(x))
 
-AUD_JOSResampleReader::AUD_JOSResampleReader(AUD_Reference<AUD_IReader> reader, AUD_Specs specs) :
+AUD_JOSResampleReader::AUD_JOSResampleReader(boost::shared_ptr<AUD_IReader> reader, AUD_Specs specs) :
        AUD_ResampleReader(reader, specs.rate),
        m_channels(AUD_CHANNELS_INVALID),
        m_n(0),
@@ -118,7 +116,8 @@ void AUD_JOSResampleReader::updateBuffer(int size, double factor, int samplesize
 {\
        sample_t* buf = m_buffer.getBuffer();\
 \
-       int P, l, end, channel, i;\
+       unsigned int P, l;\
+       int end, channel, i;\
        double eta, v, f_increment, factor;\
 \
        m_sums.assureSize(m_channels * sizeof(double));\
@@ -201,7 +200,7 @@ void AUD_JOSResampleReader::updateBuffer(int size, double factor, int samplesize
                                left\
                        }\
 \
-                       P = -P;\
+                       P = 0 - P;\
 \
                        end = (int_to_fp(m_len) - P) / P_increment - 1;\
                        if(m_cache_valid - m_n - 2 < end)\
@@ -222,7 +221,7 @@ void AUD_JOSResampleReader::updateBuffer(int size, double factor, int samplesize
 \
                        for(channel = 0; channel < m_channels; channel++)\
                        {\
-                               *buffer = f_increment / m_L * sums[channel];\
+                                                               *buffer = factor * sums[channel];\
                                buffer++;\
                        }\
                }\
@@ -230,7 +229,7 @@ void AUD_JOSResampleReader::updateBuffer(int size, double factor, int samplesize
                m_P += fmod(1.0 / factor, 1.0);\
                m_n += floor(1.0 / factor);\
 \
-               if(m_P >= 1.0)\
+               while(m_P >= 1.0)\
                {\
                        m_P -= 1.0;\
                        m_n++;\
@@ -364,9 +363,9 @@ void AUD_JOSResampleReader::read(int& length, bool& eos, sample_t* buffer)
        double factor = AUD_MIN(target_factor, m_last_factor);
 
        if(factor >= 1)
-               len = (m_n - m_cache_valid) + int(ceil(length / factor)) + ceil(num_samples);
+               len = (int(m_n) - m_cache_valid) + int(ceil(length / factor)) + ceil(num_samples);
        else
-               len = (m_n - m_cache_valid) + int(ceil(length / factor) + ceil(num_samples / factor));
+               len = (int(m_n) - m_cache_valid) + int(ceil(length / factor) + ceil(num_samples / factor));
 
        if(len > 0)
        {