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: Wed, 19 Sep 2007 21:33:57 +0000

CVSROOT:        /sources/traverso
Module name:    traverso
Changes by:     Remon Sijrier <r_sijrier>       07/09/19 21:33:57

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

Log message:
        * Add the ability to use a custom destination buffer for DecodeBuffer, 
solves an invalid free after export finished

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/traverso/src/audiofileio/decode/AbstractAudioReader.cpp?cvsroot=traverso&r1=1.10&r2=1.11
http://cvs.savannah.gnu.org/viewcvs/traverso/src/audiofileio/decode/AbstractAudioReader.h?cvsroot=traverso&r1=1.13&r2=1.14
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/Song.cpp?cvsroot=traverso&r1=1.136&r2=1.137

Patches:
Index: audiofileio/decode/AbstractAudioReader.cpp
===================================================================
RCS file: 
/sources/traverso/traverso/src/audiofileio/decode/AbstractAudioReader.cpp,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -b -r1.10 -r1.11
--- audiofileio/decode/AbstractAudioReader.cpp  18 Sep 2007 19:15:20 -0000      
1.10
+++ audiofileio/decode/AbstractAudioReader.cpp  19 Sep 2007 21:33:56 -0000      
1.11
@@ -169,6 +169,19 @@
        return newReader;
 }
 
+DecodeBuffer::DecodeBuffer()
+{
+       destination = 0;
+       resampleBuffer = 0;
+       readBuffer = 0;
+       origDestination = 0;
+       m_noDestBuffer = false;
+       m_channels = destinationBufferSize = resampleBufferSize = 
readBufferSize = 0;
+       m_bufferSizeCheckCounter = m_totalCheckSize = m_smallerReadCounter = 0;
+               
+}
+
+
 void DecodeBuffer::check_buffers_capacity(uint size, uint channels)
 {
 /*     m_bufferSizeCheckCounter++;
@@ -227,3 +240,49 @@
 //             printf("resizing resamplebuffer to %.3f KB\n", 
(float)frames*4/1024);
        }
 }
+
+void DecodeBuffer::use_custom_destination_buffer(bool custom)
+{
+       if (custom) {
+               delete_destination_buffers();
+               m_noDestBuffer = true;
+       }
+}
+
+void DecodeBuffer::delete_destination_buffers()
+{
+       if (m_noDestBuffer) {
+               return;
+       }
+       if (destination) {
+               for (uint chan = 0; chan < m_channels; chan++) {
+                       delete [] destination[chan];
+               }
+               delete [] destination;
+       }
+       destination = 0;
+       destinationBufferSize = 0;
+}
+
+void DecodeBuffer::delete_readbuffer()
+{
+       if (readBuffer) {
+               delete [] readBuffer;
+       }
+       readBuffer = 0;
+       readBufferSize = 0;
+}
+
+void DecodeBuffer::delete_resample_buffers()
+{
+       if (resampleBuffer) {
+               for (uint chan = 0; chan < m_channels; chan++) {
+                       if (resampleBufferSize) {
+                               delete [] resampleBuffer[chan];
+                       }
+               }
+               delete [] resampleBuffer;
+       }
+       resampleBuffer = 0;
+       resampleBufferSize = 0;
+}

Index: audiofileio/decode/AbstractAudioReader.h
===================================================================
RCS file: 
/sources/traverso/traverso/src/audiofileio/decode/AbstractAudioReader.h,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -b -r1.13 -r1.14
--- audiofileio/decode/AbstractAudioReader.h    19 Sep 2007 20:27:46 -0000      
1.13
+++ audiofileio/decode/AbstractAudioReader.h    19 Sep 2007 21:33:57 -0000      
1.14
@@ -29,21 +29,15 @@
 class DecodeBuffer {
        
 public:
-       DecodeBuffer() {
-               destination = resampleBuffer = 0;
-               readBuffer = 0;
-               m_channels = destinationBufferSize = resampleBufferSize = 
readBufferSize = 0;
-               m_bufferSizeCheckCounter = m_totalCheckSize = 
m_smallerReadCounter = 0;
-               
-       }
+       DecodeBuffer();
        ~DecodeBuffer() {
                delete_destination_buffers();
                delete_readbuffer();
                delete_resample_buffers();
        }
        
+       void use_custom_destination_buffer(bool custom);
        void check_buffers_capacity(uint size, uint channels);
-       
        void check_resamplebuffer_capacity(uint frames);
        
        void prepare_for_child_read(nframes_t offset) {
@@ -83,38 +77,11 @@
        long m_totalCheckSize;
        uint m_bufferSizeCheckCounter;
        audio_sample_t** origDestination; // Used to store destination during a 
child read in the resampler
+       bool m_noDestBuffer;
        
-       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;
-               readBufferSize = 0;
-       }
-       
-       void delete_resample_buffers() {
-               if (resampleBuffer) {
-                       for (uint chan = 0; chan < m_channels; chan++) {
-                               if (resampleBufferSize) {
-                                       delete [] resampleBuffer[chan];
-                               }
-                       }
-                       delete [] resampleBuffer;
-               }
-               resampleBuffer = 0;
-               resampleBufferSize = 0;
-       }
+       void delete_destination_buffers();
+       void delete_readbuffer();
+       void delete_resample_buffers();
 
 };
 

Index: core/Song.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/Song.cpp,v
retrieving revision 1.136
retrieving revision 1.137
diff -u -b -r1.136 -r1.137
--- core/Song.cpp       11 Sep 2007 18:37:30 -0000      1.136
+++ core/Song.cpp       19 Sep 2007 21:33:57 -0000      1.137
@@ -426,7 +426,7 @@
        resize_buffer(false, spec->blocksize);
        
        renderDecodeBuffer = new DecodeBuffer;
-       renderDecodeBuffer->check_buffers_capacity(spec->blocksize, 
spec->channels);
+       renderDecodeBuffer->use_custom_destination_buffer(true);
 
        return 1;
 }




reply via email to

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