traverso-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Traverso-commit] traverso/src/audiofileio/decode AbstractAudioRe...


From: Remon Sijrier
Subject: [Traverso-commit] traverso/src/audiofileio/decode AbstractAudioRe...
Date: Tue, 18 Sep 2007 19:15:20 +0000

CVSROOT:        /sources/traverso
Module name:    traverso
Changes by:     Remon Sijrier <r_sijrier>       07/09/18 19:15:20

Modified files:
        src/audiofileio/decode: AbstractAudioReader.cpp 
                                AbstractAudioReader.h 

Log message:
        * delete allocated buffers in destructor

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/traverso/src/audiofileio/decode/AbstractAudioReader.cpp?cvsroot=traverso&r1=1.9&r2=1.10
http://cvs.savannah.gnu.org/viewcvs/traverso/src/audiofileio/decode/AbstractAudioReader.h?cvsroot=traverso&r1=1.11&r2=1.12

Patches:
Index: AbstractAudioReader.cpp
===================================================================
RCS file: 
/sources/traverso/traverso/src/audiofileio/decode/AbstractAudioReader.cpp,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- AbstractAudioReader.cpp     18 Sep 2007 15:52:18 -0000      1.9
+++ AbstractAudioReader.cpp     18 Sep 2007 19:15:20 -0000      1.10
@@ -169,3 +169,61 @@
        return newReader;
 }
 
+void DecodeBuffer::check_buffers_capacity(uint size, uint channels)
+{
+/*     m_bufferSizeCheckCounter++;
+       m_totalCheckSize += size;
+       
+       if (((m_totalCheckSize / m_bufferSizeCheckCounter) + 128) < 
destinationBufferSize) {
+               m_smallerReadCounter++;
+               if (m_smallerReadCounter > 5) {
+                       // Force recreation of the buffers;
+                       destinationBufferSize = 0;
+                       m_bufferSizeCheckCounter = m_smallerReadCounter = 0;
+                       m_totalCheckSize = 0;
+               }
+       }*/
+                               
+               
+       if (destinationBufferSize < size || m_channels < channels) {
+                       
+               delete_destination_buffers();
+                       
+               m_channels = channels;
+                       
+               destination = new audio_sample_t*[m_channels];
+                       
+               for (uint chan = 0; chan < m_channels; chan++) {
+                       destination[chan] = new audio_sample_t[size];
+               }
+                       
+               destinationBufferSize = size;
+//             printf("resizing destination to %.3f KB\n", (float)size*4/1024);
+       }
+               
+       if (readBufferSize < (size*m_channels)) {
+                       
+               delete_readbuffer();
+                       
+               readBuffer = new audio_sample_t[size*m_channels];
+               readBufferSize = (size*m_channels);
+       }
+}
+
+void DecodeBuffer::check_resamplebuffer_capacity(uint frames)
+{
+               
+       if (resampleBufferSize < frames) {
+                       
+               delete_resample_buffers();
+                       
+               resampleBuffer = new audio_sample_t*[m_channels];
+                       
+               for (uint chan = 0; chan < m_channels; chan++) {
+                       resampleBuffer[chan] = new audio_sample_t[frames];
+               }
+                       
+               resampleBufferSize = frames;
+//             printf("resizing resamplebuffer to %.3f KB\n", 
(float)frames*4/1024);
+       }
+}

Index: AbstractAudioReader.h
===================================================================
RCS file: 
/sources/traverso/traverso/src/audiofileio/decode/AbstractAudioReader.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- AbstractAudioReader.h       10 Sep 2007 21:22:44 -0000      1.11
+++ AbstractAudioReader.h       18 Sep 2007 19:15:20 -0000      1.12
@@ -29,57 +29,22 @@
 class DecodeBuffer {
        
 public:
-       
        DecodeBuffer() {
                destination = resampleBuffer = 0;
                readBuffer = 0;
                m_channels = destinationBufferSize = resampleBufferSize = 
readBufferSize = 0;
-       }
+               m_bufferSizeCheckCounter = m_totalCheckSize = 
m_smallerReadCounter = 0;
        
-       void check_buffers_capacity(uint size, uint channels) {
-               
-               if (m_channels < channels || destinationBufferSize < size) {
-                       if (destination) {
-                               for (uint chan = 0; chan < m_channels; chan++) {
-                                       delete [] destination[chan];
                                }
-                               delete [] destination;
+       ~DecodeBuffer() {
+               delete_destination_buffers();
+               delete_readbuffer();
+               delete_resample_buffers();
                        }
                        
-                       m_channels = channels;
-                       destination = new audio_sample_t*[m_channels];
+       void check_buffers_capacity(uint size, uint channels);
                        
-                       for (uint chan = 0; chan < m_channels; chan++) {
-                               destination[chan] = new audio_sample_t[size];
-                       }
-                       
-                       destinationBufferSize = size;
-               }
-               
-               if (readBufferSize < (size*m_channels)) {
-                       if (readBuffer) {
-                               delete [] readBuffer;
-                       }
-                       readBuffer = new audio_sample_t[size*m_channels];
-                       readBufferSize = (size*m_channels);
-               }
-       }
-       
-       void check_resamplebuffer_capacity(uint frames) {
-               
-               if (resampleBufferSize < frames) {
-                       if (!resampleBuffer) {
-                               resampleBuffer = new 
audio_sample_t*[m_channels];
-                       }
-                       for (uint chan = 0; chan < m_channels; chan++) {
-                               if (resampleBufferSize) {
-                                       delete [] resampleBuffer[chan];
-                               }
-                               resampleBuffer[chan] = new 
audio_sample_t[frames];
-                       }
-                       resampleBufferSize = frames;
-               }
-       }
+       void check_resamplebuffer_capacity(uint frames);
        
        void prepare_for_child_read(nframes_t offset) {
                if (resampleBuffer) {
@@ -97,6 +62,7 @@
        void finish_child_read(nframes_t offset) {
                if (origDestination) {
                        destination = origDestination;
+                       origDestination = 0;
                        
                        for (uint chan = 0; chan < m_channels; chan++) {
                                resampleBuffer[chan] -= offset;
@@ -109,12 +75,45 @@
        audio_sample_t** resampleBuffer;
        uint destinationBufferSize;
        uint readBufferSize;
-       uint resampleBufferSize; // ????
+       uint resampleBufferSize;
 
 private:
        uint m_channels;
+       uint m_smallerReadCounter;
+       long m_totalCheckSize;
+       uint m_bufferSizeCheckCounter;
        audio_sample_t** origDestination; // Used to store destination during a 
child read in the resampler
 
+       void delete_destination_buffers() {
+               if (destination) {
+                       for (uint chan = 0; chan < m_channels; chan++) {
+                               delete [] destination[chan];
+                       }
+                       delete [] destination;
+               }
+               destination = 0;
+               destinationBufferSize = 0;
+       }
+       
+       void delete_readbuffer() {
+               if (readBuffer) {
+                       delete [] readBuffer;
+               }
+               readBuffer = 0;
+       }
+       
+       void delete_resample_buffers() {
+               if (resampleBuffer) {
+                       for (uint chan = 0; chan < m_channels; chan++) {
+                               if (resampleBufferSize) {
+                                       delete [] resampleBuffer[chan];
+                               }
+                       }
+                       delete [] resampleBuffer;
+               }
+               resampleBuffer = 0;
+       }
+
 };
 
 class AbstractAudioReader




reply via email to

[Prev in Thread] Current Thread [Next in Thread]