Commit a1f1e23f authored by Stefan Westerfeld's avatar Stefan Westerfeld

Performance: don't call resample() during add watermark if not necessary.

Signed-off-by: Stefan Westerfeld's avatarStefan Westerfeld <stefan@space.twc.de>
parent 88dccbbd
...@@ -591,17 +591,25 @@ add_watermark (const string& infile, const string& outfile, const string& bits) ...@@ -591,17 +591,25 @@ add_watermark (const string& infile, const string& outfile, const string& bits)
return 1; return 1;
} }
WavData in_wav_data = resample (orig_wav_data, Params::mark_sample_rate); vector<float> in_signal;
if (orig_wav_data.sample_rate() != Params::mark_sample_rate)
{
WavData in_wav_data = resample (orig_wav_data, Params::mark_sample_rate);
in_signal = in_wav_data.samples();
}
else
{
in_signal = orig_wav_data.samples();
}
/* /*
* to keep the watermarking code simpler, we pad the wave data with zeros * to keep the watermarking code simpler, we pad the wave data with zeros
* to avoid processing a partly filled frame * to avoid processing a partly filled frame
*/ */
vector<float> in_signal (in_wav_data.samples()); while (in_signal.size() % (orig_wav_data.n_channels() * Params::frame_size))
while (in_signal.size() % (in_wav_data.n_channels() * Params::frame_size))
in_signal.push_back (0); in_signal.push_back (0);
WavData wav_data (in_signal, in_wav_data.n_channels(), in_wav_data.sample_rate(), in_wav_data.bit_depth()); WavData wav_data (in_signal, orig_wav_data.n_channels(), Params::mark_sample_rate, orig_wav_data.bit_depth());
/* we have extra space for the padded wave data -> truncated before save */ /* we have extra space for the padded wave data -> truncated before save */
vector<float> out_signal (wav_data.n_values()); vector<float> out_signal (wav_data.n_values());
...@@ -687,16 +695,19 @@ add_watermark (const string& infile, const string& outfile, const string& bits) ...@@ -687,16 +695,19 @@ add_watermark (const string& infile, const string& outfile, const string& bits)
} }
} }
/* last step: resample the watermark to the original sample rate, and then add mark and original audio */ if (wav_data.sample_rate() != orig_wav_data.sample_rate())
WavData mark_wav_data (out_signal, wav_data.n_channels(), wav_data.sample_rate(), wav_data.bit_depth()); {
mark_wav_data = resample (mark_wav_data, orig_wav_data.sample_rate()); /* resample the watermark to the original sample rate */
WavData mark_wav_data (out_signal, wav_data.n_channels(), wav_data.sample_rate(), wav_data.bit_depth());
mark_wav_data = resample (mark_wav_data, orig_wav_data.sample_rate());
vector<float> mark_samples = mark_wav_data.samples(); out_signal = mark_wav_data.samples();
}
vector<float> samples = orig_wav_data.samples(); vector<float> samples = orig_wav_data.samples();
mark_samples.resize (samples.size()); out_signal.resize (samples.size());
for (size_t i = 0; i < samples.size(); i++) for (size_t i = 0; i < samples.size(); i++)
samples[i] = (samples[i] + mark_samples[i]) * Params::pre_scale; samples[i] = (samples[i] + out_signal[i]) * Params::pre_scale;
bool clipping_warning = false; bool clipping_warning = false;
for (auto value : samples) for (auto value : samples)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment