[Top][All Lists]
[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