Templateify MidiBuffer iterators (avoid code duplication since they're about to get...
[ardour.git] / libs / ardour / export_utilities.cc
index 5eafbb2d1587ffc7a10e94664916e5d4d126775c..a15a1107310e89660da816bd2906b756a755d090 100644 (file)
@@ -37,6 +37,8 @@
 
 #include <ardour/export_utilities.h>
 
+#include <string.h>
+
 #include <ardour/export_failed.h>
 #include <ardour/gdither.h>
 #include <ardour/dB.h>
@@ -53,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),
@@ -68,7 +73,7 @@ SampleRateConverter::SampleRateConverter (uint32_t channels, nframes_t in_rate,
        int err;
 
        if ((src_state = src_new (quality, channels, &err)) == 0) {
-               throw ExportFailed (string_compose (_("cannot initialize sample rate conversion: %1"), src_strerror (err)), "Cannot initialize sample rate conversion");
+               throw ExportFailed (string_compose (X_("Cannot initialize sample rate conversion: %1"), src_strerror (err)));
        }
        
        src_data.src_ratio = out_rate / (double) in_rate;
@@ -79,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);
        }
@@ -100,14 +105,15 @@ 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;
                
                max_leftover_frames = 4 * frames;
                leftover_data = (float *) realloc (leftover_data, max_leftover_frames * channels * sizeof (float));
                if (!leftover_data) {
-                       throw ExportFailed (_("A memory allocation error occured during sample rate conversion"), "Samplerate conversion failed");
+                       throw ExportFailed (X_("A memory allocation error occured during sample rate conversion"));
                }
                
                data_out_size = out_samples_max;
@@ -159,7 +165,7 @@ SampleRateConverter::process (float * data, nframes_t frames)
                ++cnt;
 
                if ((err = src_process (src_state, &src_data)) != 0) {
-                       throw ExportFailed (_("an error occured during sample rate conversion"), string_compose ("an error occured during sample rate conversion: %1", src_strerror (err)));
+                       throw ExportFailed (string_compose ("An error occured during sample rate conversion: %1", src_strerror (err)));
                }
        
                frames_out = src_data.output_frames_gen;
@@ -226,9 +232,8 @@ SampleFormatConverter<TOut>::~SampleFormatConverter ()
        if (dither) {
                gdither_free (dither);
        }
-       if (data_out) {
-               delete data_out;
-       }
+
+       delete[] data_out;
 }
 
 template <typename TOut>
@@ -239,7 +244,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;
        }