#include <ardour/export_utilities.h>
+#include <string.h>
+
#include <ardour/export_failed.h>
#include <ardour/gdither.h>
#include <ardour/dB.h>
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),
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;
if (src_state) {
src_delete (src_state);
}
- if (data_out) {
- delete [] data_out;
- }
+
+ delete [] data_out;
+
if (leftover_data) {
free (leftover_data);
}
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;
++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;
if (dither) {
gdither_free (dither);
}
- if (data_out) {
- delete data_out;
- }
+
+ delete[] data_out;
}
template <typename TOut>
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;
}