first part of fixing up send/return metering ; make send-controlling faders work...
[ardour.git] / libs / ardour / export_utilities.cc
index a9223e2e1b5d9ac0783d913e8b598e211c81b9db..dcc43c8a7fdbb8ccbbc9ed72d2cef84e30b3cb88 100644 (file)
 
 /* ...*/
 
-#include <ardour/export_utilities.h>
+#include "ardour/export_utilities.h"
 
 #include <string.h>
 
-#include <ardour/export_failed.h>
-#include <ardour/gdither.h>
-#include <ardour/dB.h>
-#include <pbd/failed_constructor.h>
+#include "ardour/export_failed.h"
+#include "ardour/gdither.h"
+#include "ardour/dB.h"
+#include "pbd/failed_constructor.h"
 
 #include "i18n.h"
 
@@ -55,6 +55,9 @@ namespace ARDOUR
 SampleRateConverter::SampleRateConverter (uint32_t channels, nframes_t in_rate, nframes_t out_rate, int quality) :
   channels (channels),
   leftover_frames (0),
+  max_leftover_frames (0),
+  frames_in (0),
+  frames_out(0),
   data_in (0),
   leftover_data (0),
   data_out (0),
@@ -81,9 +84,9 @@ SampleRateConverter::~SampleRateConverter ()
        if (src_state) {
                src_delete (src_state);
        }
-       if (data_out) {
-               delete [] data_out;
-       }
+
+       delete [] data_out;
+
        if (leftover_data) {
                free (leftover_data);
        }
@@ -102,7 +105,8 @@ SampleRateConverter::process (float * data, nframes_t frames)
        nframes_t out_samples_max = (nframes_t) ceil (frames * src_data.src_ratio * channels);
        if (data_out_size < out_samples_max) {
 
-               free (data_out);
+               delete[] data_out;
+
                data_out = new float[out_samples_max];
                src_data.data_out = data_out;
                
@@ -178,11 +182,7 @@ SampleRateConverter::process (float * data, nframes_t frames)
                
                
                nframes_t frames_written = piped_to->write (data_out, frames_out);
-               if (frames_written < 0) {
-                       return frames_written;
-               } else {
-                       frames_out_total += frames_written;
-               }
+               frames_out_total += frames_written;
 
        } while (leftover_frames > frames_in);
 
@@ -228,9 +228,8 @@ SampleFormatConverter<TOut>::~SampleFormatConverter ()
        if (dither) {
                gdither_free (dither);
        }
-       if (data_out) {
-               delete data_out;
-       }
+
+       delete[] data_out;
 }
 
 template <typename TOut>
@@ -241,7 +240,9 @@ SampleFormatConverter<TOut>::process (float * data, nframes_t frames)
        
        size_t data_size = channels * frames * sizeof (TOut);
        if (data_size  > data_out_size) {
-               free (data_out);
+
+               delete[] data_out;
+
                data_out = new TOut[data_size];
                data_out_size = data_size;
        }