[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: |
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;
}