Revision: 37710
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37710
Author:   nexyon
Date:     2011-06-21 20:14:53 +0000 (Tue, 21 Jun 2011)
Log Message:
-----------
3D Audio GSoC:
Streaming improved.

Modified Paths:
--------------
    branches/soc-2011-pepper/intern/audaspace/FX/AUD_BaseIIRFilterReader.cpp
    branches/soc-2011-pepper/intern/audaspace/FX/AUD_BaseIIRFilterReader.h
    branches/soc-2011-pepper/intern/audaspace/FX/AUD_DelayReader.cpp
    branches/soc-2011-pepper/intern/audaspace/FX/AUD_DelayReader.h
    branches/soc-2011-pepper/intern/audaspace/FX/AUD_DoubleReader.cpp
    branches/soc-2011-pepper/intern/audaspace/FX/AUD_DoubleReader.h
    branches/soc-2011-pepper/intern/audaspace/FX/AUD_EffectReader.cpp
    branches/soc-2011-pepper/intern/audaspace/FX/AUD_EffectReader.h
    branches/soc-2011-pepper/intern/audaspace/FX/AUD_FaderReader.cpp
    branches/soc-2011-pepper/intern/audaspace/FX/AUD_FaderReader.h
    branches/soc-2011-pepper/intern/audaspace/FX/AUD_LimiterReader.cpp
    branches/soc-2011-pepper/intern/audaspace/FX/AUD_LimiterReader.h
    branches/soc-2011-pepper/intern/audaspace/FX/AUD_LoopReader.cpp
    branches/soc-2011-pepper/intern/audaspace/FX/AUD_LoopReader.h
    branches/soc-2011-pepper/intern/audaspace/FX/AUD_ReverseReader.cpp
    branches/soc-2011-pepper/intern/audaspace/FX/AUD_ReverseReader.h
    branches/soc-2011-pepper/intern/audaspace/FX/AUD_SuperposeReader.cpp
    branches/soc-2011-pepper/intern/audaspace/FX/AUD_SuperposeReader.h
    branches/soc-2011-pepper/intern/audaspace/OpenAL/AUD_OpenALDevice.cpp
    branches/soc-2011-pepper/intern/audaspace/SRC/AUD_SRCResampleReader.cpp
    branches/soc-2011-pepper/intern/audaspace/SRC/AUD_SRCResampleReader.h
    branches/soc-2011-pepper/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp
    branches/soc-2011-pepper/intern/audaspace/ffmpeg/AUD_FFMPEGReader.h
    branches/soc-2011-pepper/intern/audaspace/intern/AUD_BufferReader.cpp
    branches/soc-2011-pepper/intern/audaspace/intern/AUD_BufferReader.h
    branches/soc-2011-pepper/intern/audaspace/intern/AUD_C-API.cpp
    branches/soc-2011-pepper/intern/audaspace/intern/AUD_ChannelMapperReader.cpp
    branches/soc-2011-pepper/intern/audaspace/intern/AUD_ChannelMapperReader.h
    branches/soc-2011-pepper/intern/audaspace/intern/AUD_ConverterReader.cpp
    branches/soc-2011-pepper/intern/audaspace/intern/AUD_ConverterReader.h
    branches/soc-2011-pepper/intern/audaspace/intern/AUD_IReader.h
    
branches/soc-2011-pepper/intern/audaspace/intern/AUD_LinearResampleReader.cpp
    branches/soc-2011-pepper/intern/audaspace/intern/AUD_LinearResampleReader.h
    branches/soc-2011-pepper/intern/audaspace/intern/AUD_SequencerReader.cpp
    branches/soc-2011-pepper/intern/audaspace/intern/AUD_SequencerReader.h
    branches/soc-2011-pepper/intern/audaspace/intern/AUD_SilenceReader.cpp
    branches/soc-2011-pepper/intern/audaspace/intern/AUD_SilenceReader.h
    branches/soc-2011-pepper/intern/audaspace/intern/AUD_SinusReader.cpp
    branches/soc-2011-pepper/intern/audaspace/intern/AUD_SinusReader.h
    branches/soc-2011-pepper/intern/audaspace/intern/AUD_SoftwareDevice.cpp
    branches/soc-2011-pepper/intern/audaspace/intern/AUD_StreamBufferFactory.cpp
    branches/soc-2011-pepper/intern/audaspace/sndfile/AUD_SndFileReader.cpp
    branches/soc-2011-pepper/intern/audaspace/sndfile/AUD_SndFileReader.h

Modified: 
branches/soc-2011-pepper/intern/audaspace/FX/AUD_BaseIIRFilterReader.cpp
===================================================================
--- branches/soc-2011-pepper/intern/audaspace/FX/AUD_BaseIIRFilterReader.cpp    
2011-06-21 20:14:07 UTC (rev 37709)
+++ branches/soc-2011-pepper/intern/audaspace/FX/AUD_BaseIIRFilterReader.cpp    
2011-06-21 20:14:53 UTC (rev 37710)
@@ -55,9 +55,9 @@
        delete[] m_y;
 }
 
-void AUD_BaseIIRFilterReader::read(int & length, sample_t* buffer)
+void AUD_BaseIIRFilterReader::read(int& length, bool& eos, sample_t* buffer)
 {
-       m_reader->read(length, buffer);
+       m_reader->read(length, eos, buffer);
 
        for(m_channel = 0; m_channel < m_channels; m_channel++)
        {

Modified: branches/soc-2011-pepper/intern/audaspace/FX/AUD_BaseIIRFilterReader.h
===================================================================
--- branches/soc-2011-pepper/intern/audaspace/FX/AUD_BaseIIRFilterReader.h      
2011-06-21 20:14:07 UTC (rev 37709)
+++ branches/soc-2011-pepper/intern/audaspace/FX/AUD_BaseIIRFilterReader.h      
2011-06-21 20:14:53 UTC (rev 37710)
@@ -107,7 +107,7 @@
 
        virtual ~AUD_BaseIIRFilterReader();
 
-       virtual void read(int & length, sample_t* buffer);
+       virtual void read(int& length, bool& eos, sample_t* buffer);
 
        virtual sample_t filter()=0;
 };

Modified: branches/soc-2011-pepper/intern/audaspace/FX/AUD_DelayReader.cpp
===================================================================
--- branches/soc-2011-pepper/intern/audaspace/FX/AUD_DelayReader.cpp    
2011-06-21 20:14:07 UTC (rev 37709)
+++ branches/soc-2011-pepper/intern/audaspace/FX/AUD_DelayReader.cpp    
2011-06-21 20:14:53 UTC (rev 37710)
@@ -69,7 +69,7 @@
        return m_reader->getPosition() + m_delay;
 }
 
-void AUD_DelayReader::read(int & length, sample_t* buffer)
+void AUD_DelayReader::read(int& length, bool& eos, sample_t* buffer)
 {
        if(m_remdelay > 0)
        {
@@ -81,10 +81,9 @@
                        memset(buffer, 0, m_remdelay * samplesize);
 
                        int len = length - m_remdelay;
-                       m_reader->read(len, buffer + m_remdelay * 
specs.channels);
+                       m_reader->read(len, eos, buffer + m_remdelay * 
specs.channels);
 
-                       if(len < length-m_remdelay)
-                               length = m_remdelay + len;
+                       length = m_remdelay + len;
 
                        m_remdelay = 0;
                }
@@ -95,5 +94,5 @@
                }
        }
        else
-               m_reader->read(length, buffer);
+               m_reader->read(length, eos, buffer);
 }

Modified: branches/soc-2011-pepper/intern/audaspace/FX/AUD_DelayReader.h
===================================================================
--- branches/soc-2011-pepper/intern/audaspace/FX/AUD_DelayReader.h      
2011-06-21 20:14:07 UTC (rev 37709)
+++ branches/soc-2011-pepper/intern/audaspace/FX/AUD_DelayReader.h      
2011-06-21 20:14:53 UTC (rev 37710)
@@ -66,7 +66,7 @@
        virtual void seek(int position);
        virtual int getLength() const;
        virtual int getPosition() const;
-       virtual void read(int & length, sample_t* buffer);
+       virtual void read(int& length, bool& eos, sample_t* buffer);
 };
 
 #endif //AUD_DELAYREADER

Modified: branches/soc-2011-pepper/intern/audaspace/FX/AUD_DoubleReader.cpp
===================================================================
--- branches/soc-2011-pepper/intern/audaspace/FX/AUD_DoubleReader.cpp   
2011-06-21 20:14:07 UTC (rev 37709)
+++ branches/soc-2011-pepper/intern/audaspace/FX/AUD_DoubleReader.cpp   
2011-06-21 20:14:53 UTC (rev 37710)
@@ -89,29 +89,27 @@
        return m_reader1->getSpecs();
 }
 
-void AUD_DoubleReader::read(int & length, sample_t* buffer)
+void AUD_DoubleReader::read(int& length, bool& eos, sample_t* buffer)
 {
        if(!m_finished1)
        {
                int len = length;
-               m_reader1->read(len, buffer);
+               m_reader1->read(len, m_finished1, buffer);
 
-               if(len < length)
+               if(m_finished1)
                {
                        const AUD_Specs specs = m_reader1->getSpecs();
 
                        len = length - len;
                        length -= len;
 
-                       m_reader2->read(len, buffer + length * specs.channels);
+                       m_reader2->read(len, eos, buffer + length * 
specs.channels);
 
                        length += len;
-
-                       m_finished1 = true;
                }
        }
        else
        {
-               m_reader2->read(length, buffer);
+               m_reader2->read(length, eos, buffer);
        }
 }

Modified: branches/soc-2011-pepper/intern/audaspace/FX/AUD_DoubleReader.h
===================================================================
--- branches/soc-2011-pepper/intern/audaspace/FX/AUD_DoubleReader.h     
2011-06-21 20:14:07 UTC (rev 37709)
+++ branches/soc-2011-pepper/intern/audaspace/FX/AUD_DoubleReader.h     
2011-06-21 20:14:53 UTC (rev 37710)
@@ -85,7 +85,7 @@
        virtual int getLength() const;
        virtual int getPosition() const;
        virtual AUD_Specs getSpecs() const;
-       virtual void read(int & length, sample_t* buffer);
+       virtual void read(int& length, bool& eos, sample_t* buffer);
 };
 
 #endif //AUD_DOUBLEREADER

Modified: branches/soc-2011-pepper/intern/audaspace/FX/AUD_EffectReader.cpp
===================================================================
--- branches/soc-2011-pepper/intern/audaspace/FX/AUD_EffectReader.cpp   
2011-06-21 20:14:07 UTC (rev 37709)
+++ branches/soc-2011-pepper/intern/audaspace/FX/AUD_EffectReader.cpp   
2011-06-21 20:14:53 UTC (rev 37710)
@@ -65,7 +65,7 @@
        return m_reader->getSpecs();
 }
 
-void AUD_EffectReader::read(int & length, sample_t* buffer)
+void AUD_EffectReader::read(int& length, bool& eos, sample_t* buffer)
 {
-       m_reader->read(length, buffer);
+       m_reader->read(length, eos, buffer);
 }

Modified: branches/soc-2011-pepper/intern/audaspace/FX/AUD_EffectReader.h
===================================================================
--- branches/soc-2011-pepper/intern/audaspace/FX/AUD_EffectReader.h     
2011-06-21 20:14:07 UTC (rev 37709)
+++ branches/soc-2011-pepper/intern/audaspace/FX/AUD_EffectReader.h     
2011-06-21 20:14:53 UTC (rev 37710)
@@ -69,7 +69,7 @@
        virtual int getLength() const;
        virtual int getPosition() const;
        virtual AUD_Specs getSpecs() const;
-       virtual void read(int & length, sample_t* buffer);
+       virtual void read(int& length, bool& eos, sample_t* buffer);
 };
 
 #endif //AUD_EFFECTREADER

Modified: branches/soc-2011-pepper/intern/audaspace/FX/AUD_FaderReader.cpp
===================================================================
--- branches/soc-2011-pepper/intern/audaspace/FX/AUD_FaderReader.cpp    
2011-06-21 20:14:07 UTC (rev 37709)
+++ branches/soc-2011-pepper/intern/audaspace/FX/AUD_FaderReader.cpp    
2011-06-21 20:14:53 UTC (rev 37710)
@@ -42,13 +42,13 @@
 {
 }
 
-void AUD_FaderReader::read(int & length, sample_t* buffer)
+void AUD_FaderReader::read(int& length, bool& eos, sample_t* buffer)
 {
        int position = m_reader->getPosition();
        AUD_Specs specs = m_reader->getSpecs();
        int samplesize = AUD_SAMPLE_SIZE(specs);
 
-       m_reader->read(length, buffer);
+       m_reader->read(length, eos, buffer);
 
        if((position + length) / (float)specs.rate <= m_start)
        {

Modified: branches/soc-2011-pepper/intern/audaspace/FX/AUD_FaderReader.h
===================================================================
--- branches/soc-2011-pepper/intern/audaspace/FX/AUD_FaderReader.h      
2011-06-21 20:14:07 UTC (rev 37709)
+++ branches/soc-2011-pepper/intern/audaspace/FX/AUD_FaderReader.h      
2011-06-21 20:14:53 UTC (rev 37710)
@@ -72,7 +72,7 @@
        AUD_FaderReader(AUD_Reference<AUD_IReader> reader, AUD_FadeType type,
                                        float start,float length);
 
-       virtual void read(int & length, sample_t* buffer);
+       virtual void read(int& length, bool& eos, sample_t* buffer);
 };
 
 #endif //AUD_FADERREADER

Modified: branches/soc-2011-pepper/intern/audaspace/FX/AUD_LimiterReader.cpp
===================================================================
--- branches/soc-2011-pepper/intern/audaspace/FX/AUD_LimiterReader.cpp  
2011-06-21 20:14:07 UTC (rev 37709)
+++ branches/soc-2011-pepper/intern/audaspace/FX/AUD_LimiterReader.cpp  
2011-06-21 20:14:53 UTC (rev 37710)
@@ -49,13 +49,15 @@
                        // skip first m_start samples by reading them
                        int length = AUD_DEFAULT_BUFFER_SIZE;
                        AUD_Buffer buffer(AUD_DEFAULT_BUFFER_SIZE * 
AUD_SAMPLE_SIZE(m_reader->getSpecs()));
+                       bool eos = false;
                        for(int len = m_start;
-                               length == AUD_DEFAULT_BUFFER_SIZE;
+                               length == AUD_DEFAULT_BUFFER_SIZE && !eos;
                                len -= AUD_DEFAULT_BUFFER_SIZE)
                        {
                                if(len < AUD_DEFAULT_BUFFER_SIZE)
                                        length = len;
-                               m_reader->read(length, buffer.getBuffer());
+
+                               m_reader->read(length, eos, buffer.getBuffer());
                        }
                }
        }
@@ -80,18 +82,50 @@
        return AUD_MIN(pos, m_end) - m_start;
 }
 
-void AUD_LimiterReader::read(int & length, sample_t* buffer)
+void AUD_LimiterReader::read(int& length, bool& eos, sample_t* buffer)
 {
+       eos = false;
        if(m_end >= 0)
        {
                int position = m_reader->getPosition();
                if(position + length > m_end)
+               {
                        length = m_end - position;
+                       eos = true;
+               }
+
+               if(position < m_start)
+               {
+                       int len2 = length;
+                       for(int len = m_start - position;
+                               len2 == length && !eos;
+                               len -= length)
+                       {
+                               if(len < length)
+                                       len2 = len;
+
+                               m_reader->read(len2, eos, buffer);
+                               position += len2;
+                       }
+
+                       if(position < m_start)
+                       {
+                               length = 0;
+                               return;
+                       }
+               }
+
                if(length < 0)
                {
                        length = 0;
                        return;
                }
        }
-       m_reader->read(length, buffer);
+       if(eos)
+       {
+               m_reader->read(length, eos, buffer);
+               eos = true;
+       }
+       else
+               m_reader->read(length, eos, buffer);
 }

Modified: branches/soc-2011-pepper/intern/audaspace/FX/AUD_LimiterReader.h
===================================================================
--- branches/soc-2011-pepper/intern/audaspace/FX/AUD_LimiterReader.h    
2011-06-21 20:14:07 UTC (rev 37709)
+++ branches/soc-2011-pepper/intern/audaspace/FX/AUD_LimiterReader.h    
2011-06-21 20:14:53 UTC (rev 37710)
@@ -67,7 +67,7 @@
        virtual void seek(int position);
        virtual int getLength() const;
        virtual int getPosition() const;
-       virtual void read(int & length, sample_t* buffer);
+       virtual void read(int& length, bool& eos, sample_t* buffer);
 };
 
 #endif //AUD_LIMITERREADER

Modified: branches/soc-2011-pepper/intern/audaspace/FX/AUD_LoopReader.cpp
===================================================================
--- branches/soc-2011-pepper/intern/audaspace/FX/AUD_LoopReader.cpp     
2011-06-21 20:14:07 UTC (rev 37709)
+++ branches/soc-2011-pepper/intern/audaspace/FX/AUD_LoopReader.cpp     
2011-06-21 20:14:53 UTC (rev 37710)
@@ -68,21 +68,20 @@
        return m_reader->getPosition() * (m_count < 0 ? 1 : m_count);
 }
 
-void AUD_LoopReader::read(int & length, sample_t* buffer)
+void AUD_LoopReader::read(int& length, bool& eos, sample_t* buffer)
 {
-       AUD_Specs specs = m_reader->getSpecs();
+       const AUD_Specs specs = m_reader->getSpecs();
 
        int len = length;
 
-       m_reader->read(len, buffer);
+       m_reader->read(length, eos, buffer);

@@ Diff output truncated at 10240 characters. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to